2017-05-24 1 views
0

J'ai une variable d'objet qui ne contient que des données à l'accès à l'intérieur une boucle for x in y.Variable variable Twig - globale uniquement disponible à l'intérieur de la boucle

Cela se produit dans un modèle de champ pour un thème Drupal 8, où l'objectif est d'accéder à la valeur d'un champ frère.

extrait simplifié:

{% for x in [1] %} 
    Inside loop = {{ _parent.element['#object'].get('field_section_theme').value }} 
{% endfor %} 

Outside loop = {{ _parent.element['#object'].get('field_section_theme').value }} 

Sortie:

Inside loop = normal 
Outside loop = 

je comprendrais si une variable qui a été mis dans une boucle était disponible à l'extérieur, mais cela est sans rapport, tiré de le _context du modèle lui-même.

Mon contournement de l'emballage d'une référence à la variable dans une simple boucle for a résolu mon problème immédiat, mais j'aimerais bien comprendre ce qui se passe ici!

(Je voudrais aussi préfèrent une manière plus propre que l'approche for x in [1], mais normalement si vous ne souhaitez que quelque chose exécuté une fois que vous écrivez juste dehors!)

+0

ne fait pas sens. Vous devez fournir du code supplémentaire pour comprendre le vrai problème ici – DarkBee

+0

Cela n'a aucun sens, d'où la question :) C'est un modèle de champ pour un thème Drupal 8 - ce code accède à la valeur définie dans un champ frère ('field_section_theme'). Il n'y a pas de contexte * code * à fournir car ces lignes, isolément, reproduisent l'étrangeté.(Je l'ai rencontré au tout début de la création du modèle.) – Jimaginary

+0

Toutes les variables disponibles pour une page ne sont pas disponibles dans tous les modèles. Cela dépend du modèle que vous utilisez et doit apparaître dans les commentaires en haut du modèle. – garek007

Répondre

2

Ce fut une erreur de cadrage, basé sur mon incompréhension de la façon dont et où _parent a été défini - j'ai supposé qu'il était fourni par Drupal, où logiquement le "parent" du champ que je suis en train de rendre est l'entité de nœud, qui à son tour contient l'autre champ que j'essaie de référencer.

Cependant, _parent semble être une construction de brindille, avec _parentau sein la boucle principale se référant à la portée du modèle, tandis que _parenten dehors la boucle n'a pas de sens.

Il est assez évident avec le recul, mais depuis que mon code a commencé sa vie dans une boucle et la auto> parent> frères et soeurs chemin j'utilisais fait sens (dans un contexte Drupal) je ne pouvais pas comprendre pourquoi la variable était indisponible en dehors de la boucle. Pas du tout de documentation utile sur _parent, donc tous les liens seraient appréciés.


Fixing ma question particulière était aussi simple que la suppression _parent du chemin d'accès "boucle extérieure", à savoir le changement

Outside loop = {{ _parent.element['#object'].get('field_section_theme').value }}

à

Outside loop = {{ element['#object'].get('field_section_theme').value }}

+0

Beau travail, content que vous l'ayez compris – garek007

+0

Un à retenir :) – DarkBee