ノード

プログラムからノードの特定のフィールドだけを修正/更新したいとき、このようなコードを考えるかもしれません。

$node = node_load($nid);
$node->field_fieldname[LANGUAGE_NONE][0]['value'] = '更新したフィールドの値';
node_save($node);

node_load() でいったん変更したいノードの完全なデータを読み込み、修正/変更したいフィールドを操作して、node_save() で保存する。

「しかしこれでは無駄が多い」と感じてしまいますね。まず変更する必要のないフィールドもすべて読み込まなければなりません。そして変更していないフィールドや、ノード自体もすべて保存し直すことになります。フィールドの数が3つや4つならまだしも、10 や 20、50 ~ものフィールドがあったらどうでしょうか?それで1つか2つのノードを変更したいならまだしも、数千ものノードを連続で修正したい場合は?

コア: 
Drupal7
~ Controlling Nodes in Drupal 7 和訳 ~

Drupal のコンテンツのアクセスコントロールにはいくつかの方法があります。コアに組み込まれている機能、あるいは追加モジュールによって提供されるもの、またはいくつかの追加モジュールの組み合わせによって実現するものなどです。いくつかの機能は互いに互換性があります。

コア: 
Drupal7
~ Drupal 7 custom node view modes 和訳 ~

Drupal 7 では、新しいクールな機能のひとつとして、ノードの「ビューモード」を簡単に追加出来るようになりました。ビューモードは、コメントなど他のエンティティでも有効なものですが、今回はノードについて取り上げてみたいと思います。

コア: 
Drupal7

利用可能なすべてのコンテンツタイプの情報を得るには node_type_get_types() 、特定のノードのコンテンツタイプの情報を得るには node_type_get_type($node) を使います。

node_type_get_types() はコンテンツタイプの内部名称をキー、コンテンツタイプの情報のオブジェクトを値とする配列を返します。

node_type_get_type($node) は引数に渡されたノードが属するコンテンツタイプの情報のオブジェクトを返します。

コア: 
Drupal7

コンテンツタイプのフィールド項目が多くなると、ノードの編集画面の整理(グループ分け等によるカスタマイズ)が必要になってくる。

フィールドセットなどで入力フォームをグループ分けするのに、独自の汎用カスタムモジュールの中で、hook_form_FORM_ID_alter() などのフックでフォームをカスタマイズしていましたが、そういったことは、普通に CCK をインストールしていれば GUI 操作で簡単に出来ることがわかった。

コンテンツタイプの「フィールドの管理」ページで、「追加」フォームの一番下、New group を追加すれば良い。

コア: 
Drupal6

ノード編集フォームの中の CCK フィールドの、例えばセレクトボックスをチェックボックスにしたい場合なんかは、GUI で変更できる。

  1. 「管理セクション」 > 「コンテンツの管理」 > 「コンテンツタイプ」 から、操作したいコンテンツタイプの「manage fields」をクリック。
  2. 操作するフィールドの「設定」をクリック。
  3. 「基本情報の変更」ボタンをクリック。
  4. 「ウィジェットタイプ」の中から変更したい設定を選んで、「継続」ボタンをクリック。
  5. 「値の数」を無制限か2以上にするとチェックボックスに、1を選ぶとラジオボタンになる。
  6. 「使用する値のリスト」に選択できるアイテムを設定する。phpコードで入力する場合は、フォームの ’#options’ に設定する配列を返すように書くと、動作する。
コア: 
Drupal6