2010-08-11 9 views
0

Je cherche à trier une liste de noms de produits produits par Smarty. Voici le code actuel:Tableau de tri Smarty

{foreach from=$products key=i item=product} 
    <li> 
     <a href="discuss.php?product={$product.uri} 
     {if $filter_style}&amp;style={$filter_style}{/if}">{$product.name|capitalize} 
     </a> 
    </li> 
{/foreach} 

La sortie HTML:

<li>zzzzz</li> 
<li>qqqqq</li> 
<li>ccccc</li> 
<li>aaaaa</li> 

Comment trier A-Z?

+1

Triez-le dans PHP. Même si la possibilité est là, vous devriez éviter d'utiliser la manipulation de données "complexe" à l'intérieur de smarty. – Jauzsika

+0

pouvez-vous utiliser php et trier avant de boucler trier ($ produits)? –

Répondre

1

Eh bien, il est possible, mais ce n'est pas la solution parfaite:

{php} 
    sort($this->_tpl_vars['your_smarty_variable_name']); 
{/php} 
{foreach... 

Si vous voulez le faire de toute façon à Smarty il serait beaucoup plus facile (et élégante) pour écrire un smarty plugin.

btw. les balises {php} {/ php} dans smarty 3 sont obsolètes

+0

dans le cas où vous l'avez manqué, la morale de l'histoire est de ne pas utiliser Smarty. Utilisez PHP comme le moteur de template qu'il a été conçu pour être. (Assurez-vous de séparer votre logique et votre vue dans différents fichiers.) – sirbrialliance

1

Si vous voulez faire cela dans le template plutôt que dans le PHP qui assigne le tableau, vous pouvez écrire un modificateur personnalisé pour le tableau qui le trie dans la boucle foreach. Voir this blog post pour un exemple

+0

J'ai essayé que ça ne marche pas. – CLiown