web-dev-qa-db-fra.com

Vérifier qu'un champ n'est pas vide

Quelle est la meilleure méthode pour vérifier si un champ est vide dans un modèle de nœud.

Dans node - example.html.twig, nous pouvons utiliser la variable "content".

Je ne peux pas utiliser la vérification comme la vérification d'un bloc

{% if content.field_example  %}

Je peux utiliser quelque chose comme ça:

{% if content.field_example['#object'] is defined  %}

Mais quelle est la meilleure méthode?

16
sainf

Comme je l'ai également écrit dans Comment pouvez-vous rendre des champs à partir d'une référence d'entité dans des modèles de nœuds? [Drupal 8] , le contenu est un tableau de rendu qui contient des données préparées pour l'affichage.

Si vous souhaitez vérifier ou comparer quelque chose, utilisez plutôt les valeurs qui sont disponibles sur l'objet nœud.

{% if node.field_example.value %}.

Notez que la propriété dépend du type de champ. S'il s'agit d'un champ de référence, vous devez utiliser target_id à la place. La question référencée renvoie à une feuille de triche API de champ d'entité qui répertorie les types de champs courants et leurs propriétés.

22
Berdir

Vous ne pouvez pas être sûr de la structure du tableau de rendu à l'intérieur du contenu, ce n'est donc pas la meilleure méthode.

Cela peut être une meilleure solution:

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

Cela vérifie si le rendu du champ génère une sortie.

Mais cela dépend de la façon dont vous avez configuré le format de champ et de ce que vous essayez de faire. Par exemple, vous pourriez avoir configuré pour afficher une étiquette si le champ est vide. Ensuite, vous devez ajuster cela. Si vous ne dépendez pas de la sortie rendue et souhaitez uniquement vérifier, si le champ a une valeur dans la base de données, utilisez l'objet nœud. Voir la réponse de Berdir.

13
4k4

Vérifiez si le champ n'est pas vide dans Twig templating ( Collection de champs )
Template: field-collection-item - field-services.html.twig

Installez Field Twig Value Module pour obtenir la valeur en utilisant " | field_value ", suivi par " n'est pas vide "

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

       ...

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

Cette solution est assez à l'épreuve des balles et fonctionne même dans des modèles réutilisables et/ou partagés (par exemple, un node--teaser.html.twig sur plusieurs bundles) car

  • cela fonctionne pour tous les types de champs
  • il vérifie si le champ existe
  • il vérifie si le champ n'est pas vide
  • il vérifie si le champ n'est pas masqué en mode affichage

Le double négatif not ...isEmpty == true est nécessaire, sinon un champ inexistant échouerait la vérification. Je crois également que ma solution est beaucoup plus rapide et résiliente aux erreurs que toute vérification qui implique le rendu du champ.

Cela devrait fonctionner pour tout modèle d'entité, par exemple vous pouvez simplement remplacer node.field_xxx avec paragraph.field_xxx dans un paragraph.html.twig fichier modèle

2
Hudri