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.
$nodeview
tiene#node
como clavePara representar un solo campo con la configuración de visualización de un modo de vista, puede usar el
view()
método del campo:Ejemplo para representar la imagen en formato teaser:
O el cuerpo completo:
fuente
['label' => 'inline' ]
$vars['var_name'] = $node_object->field_name->view()[0];
y luego en twig, puedo renderizar {{var_name}}Esta respuesta se basa en https://drupal.stackexchange.com/a/208061/394
Para procesar completamente el campo que finaliza llamando
renderRoot()
, lo que establece un contexto de procesamiento separado del que usarían las respuestas de página típicas: un contexto de procesamiento único para una solicitud o sub-solicitud. También podríamos usarrenderPlain()
, pero luego se nos escaparía todoEn la respuesta Drush pero no en la ejecución normal de la página, esto me lanzó una advertencia:
fuente
relacionado con la respuesta de Alex , así es como lo modifiqué para usar config_pages y construir un bloque global_footer:
Probablemente sea mejor representar campos arbitrarios desde una configuración config_pages en lugar de extraer datos de un nodo, pero supongo que realmente depende del caso de uso específico en cuanto a qué método es el mejor.
fuente
Gracias a la respuesta de Rainer Feike, llegué a la solución:
Utilizando
$viewBuilder->viewField
puedo representar cualquier campo por separado que necesito. Solo necesito saber cómo agregar el almacenamiento en caché dependiendo de la configuración del modo de vista, pero esta es otra pregunta :)fuente