entity_view関数は何をしますか?


7

ドキュメントを読んでコードを検索した後、entity_view関数の目的がよくわかりません。

ドキュメントは、エンティティコントローラのビュー機能にフォールバックして、定義された場合には、ビューコールバックを実行について説明します。EntityAPIControllerを使用しているので、そのビュー関数を使用たいので、以下のような同様の構造を追加します。

したがって、entity_viewはこのような構造(ページコールバックの一部)を置き換えることであると想定しました。

// Prepare the entities
entity_prepare_view('entity_type', $entity_field_query_result);

// Apply theme to all entities
foreach($entity_field_query_result as $key => $item) {
  $entity->content = array();
  $entity->content += array(
    '#theme'     => 'my_entity_theme',
    '#element'   => $item,
    '#view_mode' => 'full',
    '#language'  => LANGUAGE_NONE,
  );
  $render[$key] = $entity->content;
}
return $render;

したがって、私はそれを

$render = entity_view('entity_type', $entity_field_query_result);

return $render;

ただし、これは空のページを示しており、前の関数でエンティティのリストが表示されていました。これらのエンティティにカスタムテーマを次のように適用しましたが、問題になる可能性がありますか?

function my_module_theme($existing, $type, $theme, $path) {
  return array(
    'my_entity_theme' => array(
      'variables' => array('element' => null),
      'template' => 'my_entity_theme',
      'path' => $path . '/template',
    ),
  );
}

それで、entity_viewに対する私の仮定は正しいですか、それともレンダリング可能な出力に到達するための手順が不足していますか?

回答:


4

EntityFieldQueryは、結果として完全に読み込まれたエンティティを返しません。からクエリ結果を実行してみてくださいentity_load('type', $result['type'])。次に、結果のエンティティをからレンダリングできますentity_view('type', $entities)

ここに例を示します:

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node');
$query->entityCondition('bundle', 'article');
$result = $query->execute();
if (!empty($result)) {
  $entities = entity_load('node', array_keys($result['node']));
  return entity_view('node', $entities, 'full');
} else {
  return array('#markup' => t('No article nodes found.'));
}

返信いただきありがとうございます。実際に読み込まれたエンティティを返す独自のクエリラッパーを作成しました。質問を書くときにそれを読みました。だから私はそれが何か別のものでなければならないと
思い

$ entity_field_query_resultの値はどのように見えますか?それらはレンダリング可能ですか?それらをrender-arrayの「#element」フィールドに直接配置します-したがって、それらは自分でレンダリング可能でなければなりません。
GUE

愚かな私-あなたがそれらをあなたが望む方法で扱うことができるあなたのテーマ機能に送られます。
GUE

したがって、entity_viewがカスタムテーマ関数で機能していないと思います。あなたはその問題を掘り下げるかもしれません:特定のエンティティタイプに独自のテーマを使用する方法。
2014

render配列をdpmした後、エントリの#theme値がentityであることがわかりましたmy_entity_theme。したがって、間違ったテーマが呼び出されます。どこが悪いのか見てみよう。
Neograph734 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.