¿Cuál es el mejor método para verificar si un campo está vacío en una plantilla de nodo?
En node - example.html.twig podemos usar la variable "contenido".
No puedo usar check como verificar un bloque
{% if content.field_example %}
Puedo usar algo como esto:
{% if content.field_example['#object'] is defined %}
¿Pero cuál es el mejor método?
Respuestas:
Como también escribí en ¿Cómo puede representar campos de una referencia de entidad en plantillas de nodo? [Drupal 8] , el contenido es una matriz de representación que contiene datos preparados para su visualización.
Si desea verificar o comparar algo, use los valores que están disponibles en el objeto nodo.
{% if node.field_example.value %}
.Tenga en cuenta que la propiedad depende del tipo de campo. Si es un campo de referencia, debe usar target_id en su lugar. La pregunta referenciada se vincula a una hoja de trucos de API de campo de entidad que enumera los tipos de campo comunes y sus propiedades.
fuente
No puede estar seguro de la estructura de la matriz de renderizado dentro del contenido, por lo que este es el mejor método posible.
Esta puede ser una mejor solución:
Esto verifica si la representación del campo genera algún resultado.
Pero esto depende de cómo haya configurado el formato de campo y qué intente hacer. Por ejemplo, podría haber configurado para mostrar una etiqueta si el campo está vacío. Entonces tienes que ajustar esto. Si no depende de la salida representada y solo desea verificar, si el campo tiene un valor en la base de datos, use el objeto nodo. Ver la respuesta de Berdir.
fuente
|render
es suficiente debido a problemas de espacios en blanco al azar de las plantillas de campo. Consulte este enlace: Verificar los campos vacíos en las plantillas de Twig es complicadoCompruebe si el campo no está vacío en Plantilla de plantilla Twig ( Colección de campos ) : field-collection-item - field-services.html.twig
Instale el Módulo de valor de ramita de campo para obtener el valor usando " | field_value ", seguido de " no está vacío "
fuente
Esta solución es bastante a prueba de balas e incluso funciona en reusealbe y / o plantillas compartidas (por ejemplo, un
node--teaser.html.twig
paquete compartido entre múltiples paquetes) porqueEl doble negativo
not ...isEmpty == true
es necesario, de lo contrario, un campo no existente no pasaría la verificación. También creo que mi solución es mucho más rápida y resistente a los errores que cualquier verificación que implique la representación del campo.Esto debería funcionar para cualquier plantilla de entidad, por ejemplo, simplemente puede reemplazar
node.field_xxx
conparagraph.field_xxx
unparagraph.html.twig
archivo de plantillafuente