Was macht die Funktion entity_view?

7

Nachdem ich die Dokumentation gelesen und den Code durchsucht habe, kann ich nicht genau herausfinden, wofür die Funktion entity_view gedacht ist.

In der Dokumentation wird erläutert, dass der Ansichtsrückruf ausgeführt wird, sofern er definiert ist, wobei auf die Ansichtsfunktion des Entitätscontrollers zurückgegriffen wird. Da ich den EntityAPIController verwende , möchte ich diese Ansichtsfunktion verwenden , die eine ähnliche Struktur wie unten hinzufügt.

Daher nahm ich an, dass entity_view eine Struktur wie diese ersetzen soll (Teil eines Seitenrückrufs).

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

Also habe ich das durch ersetzt

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

return $render;

Dies zeigt jedoch eine leere Seite, auf der mir die vorherige Funktion eine Liste von Entitäten zeigte. Ich habe benutzerdefinierte Themen wie folgt auf diese Entitäten angewendet. Könnte dies ein Problem sein?

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',
    ),
  );
}

Ist meine Annahme zu entity_view korrekt oder fehlen mir Schritte, um zu einer renderbaren Ausgabe zu gelangen?

Neograph734
quelle

Antworten:

4

Eine EntityFieldQuery gibt als Ergebnis keine vollständig geladenen Entitäten zurück. Führen Sie das Abfrageergebnis durch entity_load('type', $result['type']). Dann können Sie die resultierenden Entites durch rendern entity_view('type', $entities).

Hier ein Beispiel:

$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.'));
}
gue
quelle
Vielen Dank für die Antwort. Ich habe meinen eigenen Abfrage-Wrapper geschrieben, der tatsächlich geladene Entitäten zurückgibt. Ich habe das beim Schreiben der Frage gelesen. Also nehme ich an, es muss etwas anderes sein ...
Neograph734
Wie sehen die Werte von $ entity_field_query_result aus? Sind sie renderbar? Sie fügen sie direkt in das Feld '#element' des Render-Arrays ein - daher müssen sie selbst renderbar sein.
Gue
Dumm von mir - sie werden an Ihre Themenfunktion gesendet, wo Sie sie so behandeln können, wie Sie es möchten.
Gue
Ich denke also, entity_view funktioniert nicht mit Ihrer benutzerdefinierten Designfunktion. Sie könnten sich mit diesem Problem befassen: Wie Sie Ihr eigenes Thema für bestimmte Entitätstypen verwenden.
Gue
Nach dem Dpm'ing des Render-Arrays habe ich herausgefunden, dass die Einträge den #themeWert haben entity, wo es sein sollte my_entity_theme. Also heißt das falsche Thema. Ich werde sehen, wo das schief geht.
Neograph734