в связи с ответом Алекса , вот как я изменил его, чтобы использовать config_pages и построить блок global_footer:
<?php
public function build() {
$config_name = 'global_footer';
$config = config_pages_config($config_name);
$build = array();
$markup = array();
$fieldsToRender = array(
'field_body', 'field_foo', 'field_bar'
);
$viewmode = 'default';
$entityType = 'config_pages';
$display = entity_get_display($entityType, $config_name, $viewmode);
$viewBuilder = \Drupal::entityTypeManager()->getViewBuilder($entityType);
foreach ($fieldsToRender as $field_name) {
if (isset($config->{$field_name}) && $field = $config->{$field_name}) {
$fieldRenderable = $viewBuilder->viewField($field, $display->getComponent($field_name));
if (count($fieldRenderable) &&! empty($fieldRenderable)) {
$markup[] = \Drupal::service('renderer')->renderRoot($fieldRenderable);
}
}
}
if (count($markup)) {
$build = array(
'#type' => 'markup',
'#markup' => implode("", $markup),
);
}
return $build;
}
Вероятно, лучше визуализировать произвольные поля в настройке config_pages, а не извлекать данные из узла, но я думаю, что это действительно зависит от конкретного варианта использования того, какой метод лучше.
$nodeview
имеет в#node
качестве ключа