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?
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.
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.
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 %}
{% 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
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