Chcę wyrenderować pole węzła w bloku. Działa to tak:
<?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;
Ale to nie jest 100%, jakbym po prostu renderował pole normalnie, dzięki czemu byłoby widoczne w ustawieniach trybu widoku.
$nodeview
ma#node
jako kluczAby wyrenderować pojedyncze pole z ustawieniem wyświetlania trybu widoku, możesz użyć
view()
metody pola:Przykład renderowania obrazu w formacie zwiastuna:
Lub ciało w całości:
źródło
['label' => 'inline' ]
$vars['var_name'] = $node_object->field_name->view()[0];
a następnie w gałązce, mogę renderować {{var_name}}Ta odpowiedź opiera się na https://drupal.stackexchange.com/a/208061/394
Aby całkowicie programowo renderować pole, które kończysz przez wywołanie
renderRoot()
, co ustanawia odrębny kontekst renderowania od typowych odpowiedzi strony - pojedynczy kontekst renderowania dla żądania lub żądania częściowego. Moglibyśmy również użyćrenderPlain()
, ale wtedy uciekłoby od wszystkich rzeczy.W replice Drusha, ale nie w normalnym wykonaniu strony, wygenerowało to ostrzeżenie:
źródło
związane z odpowiedzią Alexa , oto jak zmodyfikowałem ją, aby używał config_pages i budowałem blok global_footer:
Prawdopodobnie lepiej jest renderować dowolne pola z konfiguracji config_pages w przeciwieństwie do pobierania danych z węzła, ale myślę, że tak naprawdę zależy to od konkretnego przypadku użycia, który sposób jest najlepszy.
źródło
Dzięki odpowiedzi Rainer Feike doszedłem do rozwiązania:
Za pomocą
$viewBuilder->viewField
mogę renderować dowolne pola osobno, których potrzebuję. Muszę tylko dowiedzieć się, jak dodać buforowanie w zależności od ustawień trybu widoku, ale to kolejne pytanie :)źródło