フォーマットを含むフィールド値をどのようにレンダリングしますか?


9

データベースからフィールド値とそのフォーマットを読み取っています。その値をフォーマットでどのようにレンダリングしますか?

回答:


36

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);

$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]);
johirpro

0

apiをチェックすることで、あなたはこれを探していると思います。(私はとにかくコードをテストしていません)

$the_field = field_view_field($entity_type, $entity, $field_name, $display = array(), $langcode = NULL);

// render the field
drupal_render($the_field);

更新:重複した回答、単に私を削除する場合があります。この回答を書いている間に他の回答が投稿されました。


0

カスタムフォーマッタモジュールを使用する場合は、フォーマッタのマシン名の前に次のように接頭辞 'custom_formatters_'を追加することを忘れないでください。

$display = array('type' => 'custom_formatters_my_formatter');

0

テンプレートファイルを編集して、これが意味的に出力される方法を調整することもできます。

1)カスタム日付フォーマットを設定し、「short_date_only」などのマシン名を付けます。2)その形式を使用するようにコンテンツタイプの表示オプションを構成します3)フィールドテンプレートをfield--field_date_custom-content_type.tplのようなものにオーバーライドします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.