Verifique que un campo no esté vacío

15

¿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?

sainf
fuente
1
Use hook_preprocess y verifique mediante programación, quizás agregue una variable indicadora. De lo contrario, lo que escribió 4k4.

Respuestas:

21

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.

Berdir
fuente
Para el campo de imagen {% node.field_article_image.target_id%}
Yogesh Kushwaha
13

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:

{% if content.field_example|render|striptags|trim %}
  <p>field is not empty</p>
{% endif %}

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.

4k4
fuente
Considero que Berdir responde bien porque es más flexible.
sainf
@ 4k4: No |renderes 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 complicado
Mojtaba Reyhani
@MojtabaReyhani: Gracias, gran descubrimiento. Encontramos allí este enlace drupal.org/node/2783633#comment-11510195 . Agregó esto al código.
4k4
4

Compruebe 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 "

{% if content.field_work|field_value is not empty %}

       ...

{% endif %} 
Alberto Galvis
fuente
1
{% if not (node.field_whatever.isEmpty == true) and content.field_whatever is defined %}
  <div class="whatever_markup">
    {{ content.field_whatever }}
  </div>
{% endif %}

Esta solución es bastante a prueba de balas e incluso funciona en reusealbe y / o plantillas compartidas (por ejemplo, un node--teaser.html.twigpaquete compartido entre múltiples paquetes) porque

  • funciona para todos los tipos de campo
  • comprueba si el campo existe
  • comprueba si el campo no está vacío
  • comprueba si el campo no está oculto en el modo de visualización

El doble negativo not ...isEmpty == truees 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_xxxconparagraph.field_xxx un paragraph.html.twigarchivo de plantilla

Hudri
fuente