Intento incrustar una vista en un nodo específico. Encontré tutoriales para hacer esto con Drupal 7 y Plantillas PHP:
<?php print views_embed_view('view_name'); ?>
Pero busco un camino en Drupal 8 con plantillas de ramitas. Intenté llamar a la views_embed_view()
función en hook_node_view()
y asignarla al nodo para poder imprimirla en la plantilla de ramita. Pero parece que este gancho nunca se llama.
¿Alguna sugerencia / solución sobre cómo hacer esto de la manera Drupal 8?
Así es como me funcionó en el subtema Drupal 8 beta 12 de Classy.
En el archivo your_theme.info.theme
Copié el node.html.twig y rodeé las etiquetas del artículo (o el área que desea reemplazar) con un bloque de ramas. Coloqué esto en la carpeta / template / content.
Luego creé un nodo: 2.html.twig (reemplace 2 con el nodo deseado) en la carpeta / template / content con el siguiente código.
fuente
El primer problema con el que está luchando es que las entidades renderizadas como los nodos ahora se almacenan en caché de forma predeterminada, por lo que hook_node_view () solo se llama una vez después de que un caché borre / guarde ese nodo.
Sin embargo, esto es bastante fácil de deshabilitar, vea settings.local.php.
Luego, poner la salida de una vista en $ build es bastante fácil y funciona más o menos como en 7.x. En lugar de usar la función de inserción , considere usar $ views = Views :: getView () y luego $ views-> buildRenderable ()
Dos consejos:
fuente
settings.local.php
y borré todas las cachés. Pero mi ganchothemename_node_view()
enthemename.theme
todavía no se llama. ¿Tienes alguna idea de por qué este podría ser el caso?Como Berdir aludió a Ver-> buildRenderable es lo que está buscando, pero para dar más contexto en un módulo, deberá hacer lo siguiente.
Luego, en su plantilla de página, puede acceder a ella con
fuente
Dentro de las vistas, puede crear un bloque con sus datos relevantes.
Después de la creación del bloque, puede asignar el bloque para que aparezca en el área de contenido que desee (pie de página / encabezado / contenido / etc.). Asignelo y luego haga clic en "configurar". Debería poder "Mostrar bloque en páginas específicas". Seleccionar "Solo las páginas enumeradas" y agregar / node / your-node-number a la especificación de la página debería limitar esa vista / bloque a aparecer solo con el nodo deseado.
¡Salud!
fuente
views_embed_view()
enfoque es mucho más fácil y limpio, supongo.Sé que mencionas que te gustaría usar plantillas de ramitas, pero podrías usar el módulo Campo de referencia de vistas para evitar tener que buscar en las plantillas. También ofrece la ventaja de poder agregarlo a cualquier entidad de campo para que los editores de contenido puedan configurar la vista / salida.
fuente