Я хочу визуализировать поле узла внутри блока. Это работает так:
<?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;
Но это не 100%, как если бы я просто отображал поле в обычном режиме, делая его видимым в настройках режима просмотра.
$nodeview
имеет в#node
качестве ключаДля визуализации отдельного поля с настройкой отображения режима просмотра вы можете использовать
view()
метод поля:Пример для рендеринга изображения в формате тизера:
Или тело в полном объеме
источник
['label' => 'inline' ]
$vars['var_name'] = $node_object->field_name->view()[0];
и затем в ветке , я могу сделать {{var_name}}Этот ответ основан на https://drupal.stackexchange.com/a/208061/394
Чтобы полностью программно отобразить поле, вы заканчиваете вызовом
renderRoot()
, который устанавливает отдельный контекст визуализации из того, что будут использоваться типичные ответы страницы - один контекст визуализации для запроса или подзапроса. Мы могли бы также использоватьrenderPlain()
, но тогда это избежало бы всех вещей.В реплике Drush, но не в обычном исполнении страницы, это выдало мне предупреждение:
источник
в связи с ответом Алекса , вот как я изменил его, чтобы использовать config_pages и построить блок global_footer:
Вероятно, лучше визуализировать произвольные поля в настройке config_pages, а не извлекать данные из узла, но я думаю, что это действительно зависит от конкретного варианта использования того, какой метод лучше.
источник
Благодаря ответу Райнера Фейке я пришел к решению:
Используя
$viewBuilder->viewField
я могу визуализировать любые поля отдельно мне нужно. Мне просто нужно узнать, как добавить кеширование в зависимости от настроек режима просмотра, но это другой вопрос :)источник