Necesito tomar el control sobre la representación de un field_admin_tags
campo en una node.html.twig
plantilla.
Esto funciona:
{{ content.field_admin_tags }}
- Representa todo (etiqueta + todos los valores de campo){{ content.field_admin_tags.0 }}
- Representa solo el primer valor en el campo, y sin etiqueta
PROBLEMA: No tengo control sobre el marcado que rodea las etiquetas, por ejemplo <ul><li>...</li></ul>
.
Entonces mi idea era iterar sobre la matriz de renderizado .
Pero eso no funciona:
{% for tag in content.field_admin_tags %}
{{ tag }}
{% endfor %}
Me sale: Exception: Object of type Drupal\node\Entity\Node cannot be printed
.
Creo que estoy iterando sobre las claves / valores de la matriz de renderizado frente a los elementos dentro del campo (si imprimo una "X" en cada bucle, obtengo 20 X mientras solo tengo dos o tres valores en este campo) .
Me gustaría para repetir content.field_admin_tags.0
, content.field_admin_tags.1
etc.
¿Algúna idea de cómo arreglar esto? Gracias.
Respuestas:
Puedes arreglar esto en una rama de campo. Allí puede usar el bucle existente para iterar sobre los elementos de campo:
node.html.twig
field - field-admin-tags.html.twig
Este ejemplo reemplaza
<div>
con<ul>
. No elimine{{ attributes }}
ni omita la plantilla de campo, consulte ¿Qué puede interrumpir quickedit y cómo puedo solucionarlo?fuente
{{ content.field_admin_tags }}
De acuerdo con 4k4, la plantilla de campo es el mejor lugar, si realmente lo desea en la plantilla de entidad (por ejemplo, nodo) puede hacer algo como esto:
Pero, sinceramente, creo que es un poco feo, la plantilla de campo es el lugar correcto.
fuente
Si, como yo, está buscando una manera de recorrer los párrafos de la plantilla de ramita de un nodo, aquí le mostramos cómo hacerlo:
Suponga que tiene un nodo con un campo de párrafo de varios valores, de modo que un editor de contenido puede crear varios párrafos y desea recorrer cada párrafo en la plantilla de ramita de nodos (por ejemplo, para agregar un contenedor alrededor de cada párrafo):
ACTUALIZACIÓN: necesitaba encontrar otra forma de imprimir todos los párrafos sin usar contenido. La variable de contenido contiene todo lo que configuró en la sección 'Administrar pantalla' del nodo, pero mi método de trabajo actual es nunca usar 'Administrar pantalla' ni diseños, ya que realmente puede acceder a todos los datos en el archivo de ramita del nodo, y casi todos configuraciones que haría en 'Administrar pantalla', como aplicar un estilo de imagen o configurar un formato de fecha, ... puede hacerlo directamente en rama.
Para mí, esto es una ventaja porque sé que todo lo que veo proviene del archivo twig, y no necesito buscar algunas configuraciones de campo oscuras que puedan agregar clases en alguna parte. Entonces, todo lo que veo proviene de un solo lugar (el archivo de ramita de nodos) y no una combinación del archivo de ramita y la pantalla de visualización de administración.
De todos modos, utilizando el impresionante módulo Twig Tweak, aquí se explica cómo imprimir un campo de párrafo de valores múltiples en el archivo twig de un nodo sin tener que usar la variable de contenido:
fuente
He encontrado que la
#items
propiedad es útil al construir bucles de longitud desconocida en Twig:fuente
Si desea colocar contenedores adicionales alrededor de los campos dentro del campo de párrafo o necesita por alguna razón un valor de campo de referencia de párrafo particular, puede hacer lo siguiente:
Al hacerlo
{{kint(content.paragraph_field_name[key])}}
, verá que los campos son accesibles dentro de la parte ['#párrafo'] de la matriz.fuente