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?
Réponses:
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.
la source
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:
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.
la source
|render
n'est pas suffisant en raison de problèmes aléatoires d'espaces blancs dans les modèles de champ, voir ce lien: vérification des champs vides dans les modèles Twig est compliquéeVérifiez si le champ n'est pas vide dans le modèle de modèle Twig ( Collection de champs ) : field-collection-item - field-services.html.twig
Installez le module de valeur Field Twig pour obtenir la valeur à l'aide de " | field_value ", suivi de " n'est pas vide "
la source
Cette solution est tout à fait à l'épreuve des balles et fonctionne même dans des modèles réutilisables et / ou partagés (par exemple, un partage entre
node--teaser.html.twig
plusieurs bundles) carLe 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 n'importe quel modèle d'entité, par exemple, vous pouvez simplement le remplacer
node.field_xxx
parparagraph.field_xxx
dans unparagraph.html.twig
fichier de modèlela source