2010-06-25 3 views
14

Comment obtenir la dernière valeur d'index de boucle foreach dans Smarty, im new Smarty Je l'ai utilisé ce code, mais sa ne fonctionne pasComment trouver dernier index de boucle foreach dans Smarty

{foreach from=$cityList key=myId item=i name=foo} 
{$i.location_name}{if $main_smarty.foreach.foo.last}<hr>{else}-{/if} 
    {/foreach} 

je veux que lorsque leur est le dernier nom de la ville après sa venue ligne horizontale sinon son comme l'Inde-USA-Japon- mais enfin il vient du Japon-Chine

en .php j'utilise

<?php 
include_once('Smarty.class.php'); 
$main_smarty = new Smarty; 

query to find citylist 
$main_smarty->assign('cityList',$cityList); 
?> 
+0

s'il vous plaît fournir plus de code, afin que nous puissions déterminer le problème, l'extrait que vous fournissez me semble correct et devrait bien fonctionner – jigfox

Répondre

22

Vous cherchez celui-ci:

{foreach from=$cityList key=myId item=i name=foo} 
    {if $smarty.foreach.foo.last} 
     <p>This is the last item from the array!</p> 
    {/if} 
{/foreach} 

Comme vous voyez, la propriété que vous devez vérifier est $smarty.foreach.foo.lastfoo est le nom de votre objet.

+0

ce qui est $ smarty ici puis-je utiliser autre chose à cet endroit comme je l'utilise $ main_smarty .php j'assigne $ main_smarty-> assign ('cityList', $ cityList); –

+0

Pour autant que je sache, '{$ smarty}' est une variable réservée et vous devriez l'utiliser. Cela ne devrait pas avoir d'importance si votre objet php est nommé différemment. Vous pouvez en savoir plus sur '{$ smarty}' ici: http://www.smarty.net/manual/fr/language.variables.smarty.php –

+1

J'ai utilisé $ smarty aussi mais ça ne marche pas –

4

Si $ arr est le tableau que vous passé à {foreach}, ce fera l'affaire:

{$arr|@end} 

En fait, il ne doit pas être appelé dans un {foreach}

2
{foreach from=$foo item=$bar name=foo} 
    {if $smarty.foreach.foo.last} 
     Total of({$smarty.foreach.foo.total}) Items <br /> 
     Data ({$bar}) 
    {/if} 
{/foreach} 
2

Je pense que les nouvelles versions de Smarty ont une nouvelle technique de résoudre ce problème que ce que les autres réponses montrent. L'exemple de latest docs (au moment de l'écriture) utilise la propriété @last. Vous pouvez l'utiliser comme ceci: {if [email protected]}...
Exemple complet:

{* Add horizontal rule at end of list *} 
{foreach $items as $item} 
    <a href="#{$item.id}">{$item.name}</a>{if [email protected]}<hr>{else},{/if} 
{foreachelse} 
    ... no items to loop ... 
{/foreach} 
0

Ma solution:

PHP

Array 
(
    [0] => car 
    [1] => toy 
    [2] => cat 
    [3] => gun 
    [4] => dog 
) 

tpl

{foreach from=$interest key=$key item=$item} 
    {$item.value}{if $key < ($interest|count - 1)}, {/if} 
{/foreach} 

Résultat

+0

Dernier article: '{if $ key> = ($ intérêt | count - 1)}. {/ If}' –