回答:
Field APIのしくみを分析するのに多くの時間を費やす可能性がありますが、実際には、データベースを自分で照会するのではなく、Field APIを直接使用してフィールドコンテンツをレンダリングする必要があります。バイパスされた場合に古い神々を呼び起こすフィールドに追加された多くのカプセル化と抽象化があります。
フィールドAPIを使用して、フォーマットされたフィールド全体が必要な場合は、ラベルとすべての値を使用して、次のように使用しますfield_view_field()
。
$nid = 1;
$node = node_load($nid);
$output = field_view_field('node', $node, 'field_foo');
// $output is a render array, so it needs to be rendered first
print render($output);
フィールド内の1つのアイテムのフォーマットされた値を表示するだけの場合field_view_value()
は、を使用する必要があります。これは少し複雑です。
// Must load field content for entity before using field_view_value()
$fields = field_get_items('node', $node, 'field_foo');
// $index corresponds to the value you want to render. First value = 0.
$index = 0;
$output = field_view_value('node', $node, 'field_foo', $fields[$index]);
print render($output);
フィールドインスタンスに指定されたデフォルト以外のフォーマッタを使用する場合$display
は、field_view_field()
またはのいずれかのパラメータを使用して、フォーマッタを渡しますfield_view_value()
。
$display = array('type' => 'my_formatter');
$output = field_view_field('node', $node, 'field_foo', $display);
カスタムフォーマッタモジュールを使用する場合は、フォーマッタのマシン名の前に次のように接頭辞 'custom_formatters_'を追加することを忘れないでください。
$display = array('type' => 'custom_formatters_my_formatter');
$index
(field_view_valueの三番目のパラメータは、()) $のデルタです。単一の値フィールドでは、これは0になります。したがって、$output = field_view_value('node', $node, 'field_foo', $fields[0]);
or を使用できます$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);