Pregunta:
Quiero representar el campo de un nodo dentro de un bloque. Funciona así:
<?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;
Pero esto no es 100% como si simplemente renderizara el campo normalmente, haciéndolo visible en la configuración del modo de vista.
Respuesta:
Creo que el modo de vista debería aplicarse al nodo, no al campo. Por lo tanto, debe obtener el generador de vistas y renderizar el nodo. Luego, puede elegir la matriz renderizada para el campo de la matriz de renderizado node'r. Algo así como esto:
$vb = [EntityTypeManager]->getViewBuilder('node'); // Drupal\node\NodeViewBuilder
$nodeview = $vb->view($node, $viewmode);
$fieldrenderarray = $nodeview[youfield-here];
PD: Necesitas "[EntityTypeManager]" de todos modos inyectado como servicio @ entity_type.manager. O consígalo en su Block-Plugin create () desde $ container-> get ('entity_type.manager').