D7 でプログラムコードからフィールドを表示する方法

  • 2013-02-27 (水) 21:31 初版作成
    2013-12-18 (水) 16:28 最終更新

ノード オブジェクト ($node) に定義されているフィールドの値をプログラムで表示するにはどうすればよいか。オブジェクトの要素に直接アクセスして出力することもできるが、Drupal 7 では field_view_field() API を使用する。

たとえば、システム内部名称が field_hoge というフィールドの場合は次のように呼び出す。

field_view_field('node', $node, 'field_hoge');

第1引数はエンティティの種類で 'node' か 'user' を指定できる。ここでは対象となるエンティティがノードなので 'node' を指定。第2引数は表示対象フィールドが格納されたオブジェクト。第3引数がフィールドのシステム内部名称。

さらに、第4引数として表示モードの名前または表示設定の配列を渡すこともできる。後者はフィールド設定 UI の [表示管理] タブでの指定に対応する。たとえば、フィールドのラベル表示を抑制したい場合は、次のようにオプションを指定する。

field_view_field('node', $node, 'field_hoge', array('label'=>'hidden'));

詳しくは、field_view_field() API のリファレンスを参照。

この関数は表示に必要なデータを格納した配列を戻り値として返却する。この配列を HTML コンテンツに変換するには render() 関数を使用する。まとめると、ノード ($node) の field_hoge フィールドのコンテンツを表示するコードは次のようになる。

$out = field_view_field('node', $node, 'field_hoge', array('label'=>'hidden'));
print render($out);

render() 関数は HTML コンテンツを返すだけで表示は行わないので、print や echo で戻り値を出力する必要がある点に注意。

更新履歴

  • 2013-12-18 (水) 16:28

DISQUS コメント