Ich möchte das Feld eines Knotens innerhalb eines Blocks rendern. Es funktioniert so:
<?php
if ($node) {
if (isset($node->field_body_secondary) && $field = $node->field_body_secondary->value) {
$markup = render($field);
$build = array(
'#type' => 'markup',
'#markup' => $markup,
);
}
}
return $build;
Dies ist jedoch nicht 100% ig, als würde ich das Feld nur normal rendern und es in den Einstellungen des Ansichtsmodus sichtbar machen.
$nodeview
hat#node
als SchlüsselUm ein einzelnes Feld mit der Anzeigeeinstellung eines Ansichtsmodus zu rendern, können Sie die
view()
Methode des Felds verwenden:Beispiel für das Rendern des Bildes im Teaser-Format:
Oder der Körper in vollem Umfang:
quelle
['label' => 'inline' ]
$vars['var_name'] = $node_object->field_name->view()[0];
und dann in Zweig kann ich {{var_name}}Diese Antwort baut auf /drupal//a/208061/394 auf
Um das Feld, das Sie durch Aufrufen beenden
renderRoot()
, vollständig programmgesteuert zu rendern , wird ein separater Renderkontext erstellt, der von den typischen Seitenantworten getrennt ist - ein einzelner Renderkontext für eine Anforderung oder Unteranforderung. Wir könnten es auch gebrauchenrenderPlain()
, aber dann würde es allen Dingen entkommen.In der Drush-Antwort, aber nicht in der normalen Seitenausführung, warnte mich dies:
quelle
Im Zusammenhang mit Alex 'Antwort habe ich Folgendes geändert, um config_pages zu verwenden und einen global_footer-Block zu erstellen:
Es ist wahrscheinlich besser, beliebige Felder aus einem config_pages-Setup zu rendern, als Daten von einem Knoten abzurufen, aber ich denke, es hängt wirklich vom spezifischen Anwendungsfall ab, welche Methode die beste ist.
quelle
Dank der Antwort von Rainer Feike kam ich zu der Lösung:
Mit
$viewBuilder->viewField
kann ich alle benötigten Felder separat rendern. Ich muss nur herausfinden, wie man Caching in Abhängigkeit von den Einstellungen des Ansichtsmodus hinzufügt, aber dies ist eine andere Frage :)quelle