2010-01-12 7 views
1

J'ai un fichier de modèle Smarty dans lequel je suis en boucle sur des données hiérarchiques représentées par des tableaux imbriqués. Les données de l'enfant est représenté exactement de la même manière que les données relatives aux parents, alors je voulais récursive {include} le template Smarty, pour rendre ceci:

Source de « my.tpl »:

{foreach from=$children item="child" name="childrenLoop"} 
    {* display stuff here *} 
    {if $smarty.foreach.childrenLoop.last} 
     {* do something special here when it is the last item *} 
    {/if} 

    {assign var="grandChildren" value=$child->getChildren()} 
    {if $grandChildren|@count > 0} 
     {include file="my.tpl" children=$grandChildren} 
    {/if} 
{/foreach} 

Mon problème Quand le {include} termine l'exécution, $smarty.foreach.childrenLoop.* me parle de la boucle {include}'s, pas de la boucle actuelle. Donc, si la boucle interne a 10 éléments et la boucle externe a 5, {$smarty.foreach.childrenLoop.total} sera 10 lorsque je quitte la boucle interne, plutôt que 5. Inutile de dire que cela gâche ma sortie.

Je pensais que je pourrais contourner ce problème en suffixant la boucle avec une valeur passée par l'include. Il me semble être en mesure de nommer correctement la boucle:

{foreach from=$children item="child" name="childrenLoop_`$suffix`"} 

... mais je ne peux pas comprendre comment accéder à ses propriétés, et le manuel Smarty est pas utile:

{$smarty.foreach.childrenLoop_$suffix.total} {* NOPE! *} 
{$smarty.foreach[childrenLoop_$suffix].total} {* NOPE! *} 

Qu'est-ce que puis-je faire ici?

Répondre

1

Peut-être essayer

{assign var="chSuffix" value="childrenLoop_$suffix"} 
{foreach from=$children item="child" name="$chSuffix"} 
    {$smarty.foreach.$chSuffix.total} 
{/foreach} 
+0

Ah, je ne l'avais pas envisagé sauver toute la convention de nommage dans une variable. J'ai dû faire une petite correction (la syntaxe correcte est {assign var = "chSuffix" value = "childrenLoop_ $ suffix"}), mais cela a fonctionné! Merci!!! Pouvez-vous s'il vous plaît modifier votre message avec la bonne syntaxe? –

Questions connexes