2014-06-08 2 views
3

Je donne les résultats suivants:Brindille - variables interpolées

{% if promo.monday_unavailable == 1 %} 
    not available mondays 
{% elseif promo.monday_available == 1%} 
    available mondays 
{% else %} 
    available mondays from {{promo.monday_start}} until {{promo.monday_end}} 
{% endif %} 
<br /> 
{% if promo.tuesday_unavailable == 1 %} 
    not available tuesdays 
{% elseif promo.tuesday_available == 1%} 
    available tuesdays 
{% else %} 
    available tuesdays from {{promo.tuesday_start}} until {{promo.tuesday_end}} 
{% endif %} 
<br /> 

...

que je voudrais faire pour chaque jour de la semaine.

Je me demande s'il est possible que je peux simplifier le code à lire

{% for i in ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'] %} 

{% if promo.~i~"_unavailable" == 1 %} 
    not available mondays 
{% elseif promo.~i~"_available" == 1%} 
    available mondays 
{% else %} 
    available mondays from {{promo.~i~"_start"}} until {{promo.~i~"_end"}} 
{% endif %} 
<br /> 

{% endfor %} 

Brindille.

Toute aide serait appréciée. Je ne sais plus quels mots-clés rechercher.

Répondre

4

Réponse trouvée en écrasant mon front sur le clavier.

plutôt que

{% if promo.~i~"_unavailable" == 1 %} 

utilisation

{% promo[i~"_unavailable"] == 1 %) 
+0

J'ajouterais que dans le cas où 'promo' est un objet, il faut implémenter l'interface' ArrayAccess' (au moins pour la version 1.16 de Twig). Et il semble alors, Twig va accéder aux propriétés de l'objet en utilisant l'implémentation de l'interface avant d'utiliser getters comme expliqué dans la documentation Twig [ici] (http://twig.sensiolabs.org/doc/templates.html#variables) –

+1

Vous pouvez également utiliser la fonction d'interpolation de chaîne 'promo [" # {i} _unavailable "]', comme expliqué dans [Documentation Twig] (http://twig.sensiolabs.org/doc/templates.html#string-interpolation) (version 1.16) –

6

Je sais que c'est un vieux fil, mais brindille a un support pour l'interpolation en ligne comme:

{{i18n("language_#{langId}")}} 

Important que la chaîne à interpoler est avec des guillemets.

Questions connexes