2010-07-28 4 views
2

J'ai le code Smarty suivant:Utilisation d'une variable foreach Smarty dans les balises php

{foreach from=$additional_fields item=v} 
    {if $v.fieldid eq 5} 
     {php} 
     // several pounds of php code here 
     $myfieldid = {$v.fieldid}; // this is wrong 
     {/php} 
    {/if} 
    {/foreach} 

Je suis en train de saisir l'identifiant du champ actuel avec mon code php personnalisé, autrement dit {v.fieldid $} . J'ai trouvé quelques articles faisant référence à $ this -> _ tpl_vars [somevar] pour obtenir des variables smarty quand elles sont à l'intérieur des balises {php}, mais cela ne semble pas fonctionner avec foreach.

Je me rends compte que l'utilisation des balises {php} dans smarty est contre-intuitive à l'ensemble du concept smarty et comme totalement boiteuse, mais j'ai mes raisons. Merci pour l'aide!

Répondre

2

changement $ myfieldid = {v.fieldid $}

à

$ myfieldid = $ v [ 'fieldid']; Par ailleurs, ce que vous faites est maléfique!

+1

Pure evil! Bingy, ça n'a pas marché dans les tags php. Dans votre exemple, php recherche un tableau nommé $ v, mais $ v est une variable smarty, donc il n'existe pas dans le monde PHP, je suppose. Merci pour la suggestion cependant. – Banjer

+0

Donc, fondamentalement, c'est faux. -1. –

0

Si vous utilisez déjà PHP dans un template smarty, pourquoi ne pas implémenter foreach comme une boucle PHP et pas smarty loop?

+0

Il y a un tas de code Smarty intérieur qui foreach. J'ai simplifié le code pour cette question. @Bingy - va essayer votre conseil et revenir vers vous plus tard aujourd'hui. – Banjer

1

Bien que ce soit un peu de vieux sujets, j'ai réussi à le résoudre en combinant un peu de suggestion de Bingy. D'abord, vous obtenez la variable smarty en php en utilisant get_template_vars, puis prenez la valeur du tableau.

$v = $this->get_template_vars('v'); 
$myfieldid = $v['fieldid']; 

OU:

$myfieldid = $this->_tpl_vars['v']['fieldid'];