Cómo Añadir Una Vista a Un Nodo En Drupal 9

En Drupal, hay diferentes formas de añadir una vista en un nodo. Estas son dos opciones.

Sergio Guardiola Herrador
2 min readFeb 24, 2021

Cuando se trata de añadir una vista en Drupal, hay muchas opciones disponibles. Normalmente, recomendaría crear un bloque en la vista y agregar el bloque a la página, pero en algunos casos, es posible que prefieras o necesites añadir la vista en una plantilla. Estas son dos formas en las que puedes hacerlo:

  1. Procesar previamente la vista y renderizarla en twig:

El primer paso es agregar esto a tu archivo * .theme en tu tema. En este ejemplo, me aseguro de que la vista solo se cargue en el modo de vista completa y solo en los tipos de contenido landing page y campaign page. Necesitaba preestablecer los argumentos con los valores seleccionados por el editor para que $string_category pueda tener un valor de cadena como “Press” y $ array_tags es una array de ids, por ejemplo [1, 2, 3].
La vista estará disponible en Twig usando la variable blog_filter_block.

/*** Implements template_preprocess_node().* @param $variables*/function THEME_preprocess_node(&$variables) {  if ($variables['view_mode'] == 'full' && in_array($variables['node']->bundle(), ['landing_page', 'campaign_page'])) {    $blog_filter_block  = views_embed_view('blog', 'blog_filter_block', $string_category, $array_tags);    $variables["blog_filter_block"] = \Drupal::service('renderer')->renderRoot($blog_filter_block);  }}

En node.html.twig, agregue el siguiente código. Si aún no tienes esa plantilla en tu tema, puedes copiarla desde core/modules/node/templates a la carpeta de tu tema (no olvides borrar la caché).

{% if blog_filter_block is not empty %}  {{ blog_filter_block }}{% endif %}

2. Agregándolo directamente en twig usando el módulo twig tweak:

Para añadir la vista de esta manera, primero deberás instalar el módulo Twig Tweak. En la función THEME_preprocess_node, solo tendrás que crear las variables que necesitarás en la plantilla twig, pero no añadir la vista:

$variables["blog_filter_category"] = $string_category;$variables["blog_filter_tags"] = $array_tags;

Luego, en node.html.twig puedes renderizar la vista usando la función drupal_view:

{% if (blog_filter_category != 'all' or blog_filter_tags != 'all') %}  {{ drupal_view('blog', 'blog_filter_block', blog_filter_category, blog_filter_tags) }}{% endif %}

Puedes ignorar la condición if. Tuve que usarla para asegurarme de que ambos valores no estuvieran vacíos.

No te olvides de que al realizar cambios en las plantillas de twig, es posible que debas limpiar la caché para ver los cambios.

👉 Encuentra más sobre mí aquí: https://sergioguardiola.net 🔥

--

--

Sergio Guardiola Herrador

I write articles in English and Spanish, mostly about programming, technology, travel, money, investing. You can find me here: https://sergioguardiola.net