2010-06-25 4 views
14

Anfahrt letzten Indexwert von foreach-Schleife in Smarty zu finden, für Smarty neuen IM habe ich diesen Code verwendet, aber seine Arbeit nichtWie letzten Index der foreach-Schleife in Smarty

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

ich will, dass, wenn ihre ist letzte Stadt Name nach dieser kommen seine horizontale Linie seine sonst wie indien-USA-Japan- aber schließlich kommen sie Japan-China

In .php verwenden i

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

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

Bitte geben Sie mehr Code, damit wir das Problem bestimmen können, das Schnipsel, die Sie zur Verfügung stellen sieht in Ordnung für mich und sollte gut funktionieren – jigfox

Antwort

22

Sie suchen:

{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} 

Wie Sie sehen, die Eigenschaft, die Sie überprüfen müssen, ist $smarty.foreach.foo.last, wobei foo der Name Ihres Objekts ist.

+0

was ist $ smarty hier kann ich etwas anderes an diesem Ort wie ich $ main_smarty verwenden und in .php ich zitiere $ main_smarty-> assign ('cityList', $ cityList); –

+0

Soweit ich weiß, ist '{$ smarty}' eine reservierte Variable und Sie sollten sie verwenden. Es sollte egal sein, ob dein PHP-Objekt anders benannt ist. Sie können mehr über '{$ smarty}' hier finden: http://www.smarty.net/manual/en/language.variables.smarty.php –

+1

ich benutzte $ smarty auch, aber sein nicht funktioniert –

4

Wenn Sie das Array $ arr ist ging an die {foreach}, dies den Trick:

{$arr|@end} 

In der Tat, es hat nicht für diesen einen in einem {foreach} aufgerufen werden

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

denke ich, neuere Versionen von Smarty eine neuere Technik haben dieses Problem zu lösen als das, was die anderen Antworten zeigen. Das Beispiel aus der latest docs (zum Zeitpunkt des Schreibens) verwendet die @last -Eigenschaft. Sie können es wie folgt verwenden: {if [email protected]}...
Komplettes Beispiel:

{* 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

Meine Lösung:

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} 

Ergebnis

+0

Letzter Artikel: '{wenn $ key> = ($ interest | count - 1)}. {/ If}' –