この非常に人気のある記事は、フィールドをレンダリングする正しい方法を説明しています: http://www.computerminds.co.uk/articles/rendering-drupal-7-fields-right-way
記事によると、フィールドをレンダリングする正しい方法は次のとおりです。
$node = node_load($nid);
$field = field_get_items('node', $node, 'field_name');
$output = field_view_value('node', $node, 'field_name', $field[$delta]);
ただし、これはノードに格納されているフィールドをレンダリングするためのものです。エンティティのフィールドのコードをどのように使用しますか?
私は Paragraphs モジュールを使用しています。このモジュールを使用すると、定義済みの「段落」エンティティにカスタムバンドルを作成できます。
entity.tpl.php
を使用して、段落モジュールのフィールドの出力を上書きできます。
エンティティに格納されているフィールドを印刷したいのですが、上記のコードはノード用であるため機能しません。
記事から投稿したサンプルコードと同等ですが、node
以外のエンティティタイプの場合は次のようになります。
_$entities = entity_load('ENTITY_TYPE_NAME', array($YOUR_ENTITY_ID));
$entity = $entities[$YOUR_ENTITY_ID];
$field = field_get_items('ENTITY_TYPE_NAME', $entity, 'field_name');
$output = field_view_value('ENTITY_TYPE_NAME', $entity, 'field_name', $field[$delta]);
_
テンプレートでこれを行っている場合、エンティティのフィールドはエンティティモジュールの template_preprocess_entity()
関数によってすでに取得されており、_$content
_変数の下で使用できるようになっているはずです。オーバーライドされたエンティティテンプレートでこれらすべての手順を実行する必要はありません。
そのための関数があります:
field_attach_view() 段落エンティティ(段落モジュール)からレンダリング可能な配列を取得するために使用する必要がありました。次に、この配列をrender()関数exでレンダリングできます。
$paragraphEntity = entity_load("paragraphs_item",array($paragraph['value']));
//Per Paragraph field on the page-node get a renderable array of fields!
$renderableParagraphBundle = field_attach_view("paragraphs_item", $paragraphEntity[$paragraph['value']], "full", $langcode = $GLOBALS['language']->language, $options = array());
print render($renderableParagraphBundle);