J'ai un champ de liste pour un type de bloc personnalisé qui ressemble à ceci:
left|Align left
right|Align right
Je peux accéder à la clé dans Twig en faisant quelque chose comme ceci:
{% block content %}
{{ content.field_align }} {# outputs 'right' #}
{% endblock %}
Cependant, si je fais une comparaison simple, il sort FALSE
.
{{ kint(content.field_align == 'right') }}
Le code suivant revient TRUE
.
{{ kint(content.field_align['#items'].getValue()|first.value == 'right') }}
Existe-t-il une version plus courte pour obtenir la "vraie" chaîne afin que je puisse utiliser les filtres de chaîne Twigs et la garder en ordre?
Réponses:
content
contient les tableaux de rendu basés sur les formateurs configurés.Si vous souhaitez accéder aux valeurs réelles, vous souhaitez y accéder via l'objet entité. Habituellement, cela est déjà disponible pour votre modèle, par exemple
node
. Pour votre cas, c'est un peu spécial car le block_content est rendu dans le contenu du bloc sans son propre modèle, vous devez donc le rendre disponible vous-même de la manièreyourtheme_preprocess_block($variables)
suivante:Ensuite, vous pouvez accéder à une valeur de champ avec
block_content.field_name.property
. Donc dans votre casblock_content.field_align.value
,. La propriété estvalue
pour la plupart des types de champs, pour les références, vous pouvez soit l'utilisertarget_id
pour l'ID, soitentity
pour l'objet entité référencé. Oui, vous pouvez accéder directement aux champs à ce sujet, mais assurez-vous de toujours vérifier qu'une référence existe sinon vous pouvez vous retrouver avec des erreurs fatales ou des exceptions. Pour accéder au libellé d'une référence de terme par exemple, vous pouvez y accéder en tant queblock_content.field_tags.entity.name.value
.Si vous ne spécifiez pas le delta de champ, il est par défaut le premier. Si vous souhaitez accéder à un autre delta, vous pouvez utiliser
entity.field_name.1.value
et ainsi de suite. Vous pouvez également les parcourir en boucle.Tout cela mappe directement sur PHP, vous pouvez également le faire
$block_content->field_tags->entity->name->value
en pré-traitement et dans d'autres endroits où vous avez le block_content.la source
block_content.field_name.value
Merci de m'aider à comprendre!Voici une alternative, un modèle uniquement qui vous permet de rendre un tableau de rendu et de vérifier sa valeur (permet de vérifier la variable comme si vous l'imprimiez, car l'impression dans Drupal 8 Twig rend automatiquement les variables qui sont des tableaux de rendu):
Ou une autre option pour enregistrer le rendu supplémentaire si vous imprimez la variable plus tard:
la source
Vous pouvez utiliser le module Twig Field Value dans ce cas. Il permet d'obtenir des données partielles à partir de tableaux de rendu de champ. Par exemple. content.field_name | field_value -get valeur du champ. Vous pouvez l'utiliser dans l'instruction IF
la source