web-dev-qa-db-ja.com

エンティティからフィールドをレンダリングする正しい方法は?

この非常に人気のある記事は、フィールドをレンダリングする正しい方法を説明しています: 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を使用して、段落モジュールのフィールドの出力を上書きできます。

エンティティに格納されているフィールドを印刷したいのですが、上記のコードはノード用であるため機能しません。

3
big_smile

記事から投稿したサンプルコードと同等ですが、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_変数の下で使用できるようになっているはずです。オーバーライドされたエンティティテンプレートでこれらすべての手順を実行する必要はありません。

3
dblue

そのための関数があります:

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