Bien, equipo, las cosas tienen buena pinta. Hemos
creado un "tipo de valor" Recipe, una consulta personalizada para cargarlos, y un convertidor de valores
para ayudar a Layouts a entender nuestros objetos Recipe.
Lo que aún no hemos hecho es decirle a Layouts cómo representar un elemento Recipe,
siendo elemento la palabra que Layouts utiliza para las "cosas" individuales
que los bloques de rejilla y de lista representan.
Y, de hecho, tenemos que decirle a Layouts cómo representar una versión de administrador de un elemento de receta, que se mostrará
aquí, así como la versión más importante del elemento para el frontend.
La forma en que se muestra un elemento se denomina "vista de elemento".
Para añadir una nueva vista de artículo, empezaremos en la configuración.
Añade una clave view con item_view debajo y app debajo.
Añadiré un comentario, porque en Layouts, app significa "admin".
Así que lo que vamos a definir bajo la clave app será la vista de administrador para nuestro elemento de receta:
A continuación, añade recipes_app...
con una pequeña nota para decir que esta clave no es importante:
A diferencia de otras cosas, como latest_recipes, esta clave interna no se utilizará en ningún sitio.
A continuación, necesitamos dos cosas importantes.
En primer lugar, template -no incluyas la "s" como he hecho yo- pon una ruta de acceso a la plantilla, como nglayouts/
-ese es un nombre de directorio estándar para usar en las plantillas, pero podrías usar cualquier cosa- y luego,
¿qué tal admin/recipe_item.html.twig:
La segunda cosa importante es la clave muy especial match.
Tenemos que decirle a Layouts que ésta es la plantilla que debe utilizarse
cuando se está renderizando un elemento de la receta.
Por ejemplo, imagina que tenemos dos tipos de valores: recetas y también entradas de blog.
Pues bien, Layouts necesitaría saber que ésta es la plantilla que debe utilizarse para las recetas...
pero que hay que utilizar una plantilla de elementos diferente para las entradas del blog.
Para ello, utilizaremos una extraña sintaxis: item\value_type ajustado a doctrine_recipe:
Donde doctrine_recipe hace referencia al nombre de nuestro tipo de valor aquí arriba:
Vamos a ver esta clave match varias veces más en este tutorial.
Layouts tiene un montón de "emparejadores" incorporados,
que se identifican con cadenas como item\value_type.
Se utilizan para ayudar a hacer coincidir una pieza de configuración, como esta plantilla,
con otra pieza de configuración, como el tipo de valor doctrine_recipe.
Hay un número finito de estos emparejadores, y vamos a
ver los más importantes a lo largo del camino.
Así que no te preocupes demasiado por ellos.
Ah, pero déjame que corrija mi error tipográfico: debería ser template sin "s".
De todos modos, quiero mencionar una cosa rápida sobre la clave de configuración view:
sólo hay un pequeño número de subclaves que van debajo de ella.
Busca tu terminal y ejecuta: php ./bin/console debug:config netgen_layouts view Esto volcará
una enorme lista de config, pero no te abrumes
Veremos las partes importantes de esto más adelante.
Lo que quiero que mires son las claves raíz que van por debajo de
view, como block_view y layout_view. Resulta
que hay seis claves diferentes que puedes poner debajo de la clave view
en tu configuración, pero sólo nos interesan dos de ellas...
por eso lo menciono.
Cuando se trata de personalizar tus vistas, ¡es realmente muy sencillo!
La primera clave que nos importa es item_view, que controla las plantillas que se utilizan cuando se representan
"elementos": es decir, cuando se representan cosas dentro de una cuadrícula o una lista. La
única otra subclave que nos interesa es block_view , que
es la forma de configurar la plantilla utilizada para representar diferentes tipos de bloques,
como el bloque title o el bloque text.
Sí, o bien estás renderizando un bloque y quieres personalizar su plantilla
o bien estás renderizando un elemento dentro de un bloque y quieres
personalizar la plantilla de ese elemento.
Así que la configuración parece gigantesca, pero la mayoría de estas cosas son internas
y nunca tendrás que preocuparte por ellas.
Bien: tenemos nuestro item_view para nuestro doctrine_recipe para el área de administración.
Vamos a añadir esa plantilla.
En el directorio templates/, crea dos nuevos subdirectorios: nglayouts/admin/.
Y luego, un nuevo archivo llamado recipe_item.html.twig.
Dentro, escribe Does it work?
y... usemos también la función dump() para poder ver a qué variables tenemos acceso:
Bien, vuelve a tu navegador, actualiza el administrador de diseños y...
¡funciona!
Y, aparentemente, tenemos acceso a varias variables.
La más importante es item.
Se trata de un objeto CmsItem de Layouts...
¡y tiene una propiedad llamada object establecida a nuestro Recipe!
¡Vamos a utilizarlo!
Digamos {{ item.object.name }}, luego una tubería, y...
imprimamos también una fecha: {{ item.object.createdAt }} - una de las
otras propiedades de Recipe canalizada en el filtro date
con Y-m-d:
¡Vamos a comprobarlo! Muévete,
refresca y... ¡ya está! Puedes hacer esto más elegante si quieres, pero esto nos servirá.
A continuación: vamos a crear la vista de artículos del frontend.