2011-01-05 5 views
13

Ich bin normalerweise kein Smarty Typ, also bin ich ein bisschen festgefahren.Wie kann ich eine Smarty-Variable erhöhen?

Ich möchte den Index eines Arrays widerspiegeln, aber ich möchte es jedes Mal erhöhen, wenn ich es echo. Diese

ist, was ich habe ...

<ul> 
    {foreach from=$gallery key=index item=image} 
    <li> 
     <img src="{$image}" alt="" id="panel-{$index++}" /> 
    </li> 
    {/foreach} 
</ul> 

Es funktioniert nicht.

Ist dies der beste Weg, um das Array vor der Verarbeitung an Smarty vorzuverarbeiten?

Gibt es eine Möglichkeit, dies mit Smarty zu tun?

+2

Aber da Sie bekommen 'index' von der foreach-Schleife, Du meinst, es ist nur um 1 tatsächlich? – mario

+0

@mario Ja, das ist was ich will. – alex

+0

Sie können auch '{counter start = 1}' anstelle des Indexes verwenden. – mario

Antwort

23

Sie so etwas wie die folgenden Aktionen durchführen:

<ul> 
    {foreach from=$gallery key=index item=image name=count} 
    <li> 
     <img src="{$image}" alt="" id="panel-{$smarty.foreach.count.index}" /> 
    </li> 
    {/foreach} 
</ul> 

von Null starten, ist index das aktuelle Array-Index.

Das ist wahrscheinlich der beste Weg, um darüber zu gehen, jedoch einen counter außerhalb einer foreach Schleife einfach zu verwenden Sie counter, wie so verwenden können:

{counter start=0 skip=1 assign="count"} 

es zu erhöhen, einfach {counter} rufen bei jeder Iteration .

{counter} 
{*Can then use the $count var*} 
    {if $count is div by 4} 
     {*do stuff*} 
    {/if} 
+1

+1 danke Russell! – alex

+0

Was ist, wenn ich den Zähler inkrementieren und dekrementieren muss? – Gio2k

+0

Was ist, wenn Sie mehr als eine Seite auf einer Seite haben? Das Zählen beginnt wieder bei "0". – karadayi

0

würde die $index++ es nicht nach dem Echo erhöhen?

try ++$index; oder tun Sie $index++, bevor Sie es echo.

3

Wenn es Smartys 2 (die von der foreach-Syntax Sie verwenden es sieht so aus) können Sie der foreach-Schleife einen Namen geben und dann {$smarty.foreach.name.index}

wie so

<ul> 
    {foreach from=$gallery key=index item=image name=foo} 
    <li> 
     <img src="{$image}" alt="" id="panel-{$smarty.foreach.foo.index}" /> 
    </li> 
    {/foreach} 
</ul> 

Der Index beginnt verwenden bei null, wenn du eine Sequenz haben willst, die bei 1 beginnt .Ziel statt .index

Ich habe Smarty schon eine ganze Weile nicht mehr benutzt, aber ich fand die offizielle Dokumentation immer sehr gut mit vielen Beispielen http://www.smarty.net/docsv2/en/language.function.foreach.tpl

0

Angenommen, Sie durch $ foo laufen, das ist ein Array mit den Index und Iterationsoptionen

{foreach from=$foo item=bar name=humbug} 
    {$smarty.foreach.humbug.index} 
    {$smarty.foreach.humbug.iteration} 
{/foreach} 

Die erste Spalte sind die Index-Ergebnisse sind in der zweiten Spalte die Iterationsergebnisse

0 - 1 
1 - 2 
2 - 3 
3 - 4 
4 - 5 

Dies bedeutet, Index beginnt bei 0 als Array-Index, wobei als Iteration die Schleife Iteration zählt, die bei 1 beginnt.

Eine Instanz, bei der die Verwendung des falschen Werts zu Problemen führen würde, besteht darin, etwas in Zeilen von 4 oder einer anderen Menge in einer Tabelle anzuzeigen.

Mit Index würde eine schlecht angelegte Tabelle verursachen. Sie würden eine sofortige Zeilenänderung bei der ersten Iteration der Schleife (Index 0) erhalten, die sich bei der 5. Iteration (Index 4) korrigiert, aber nur innerhalb des Bereichs des aktuellen Layouts, was bedeutet, dass Ihre erste Zeile nur 1 Zelle enthält es. jede andere Zeile hätte 4 Zellen und die Daten in jeder Zelle nach der ersten Zeile würden später in den Zellen der Tabelle 4 erscheinen, als dies der Fall sein sollte.

{if $smarty.foreach.humbug.index is div by 4} 
    </tr><tr> 
{/if} 

Verwendung Iteration würde eigentlich den Reihenwechsel auslegen gibt gleiche Reihen von 4 bis zur letzten Iteration oder die foreach Schleife.

{if $smarty.foreach.humbug.iteration is div by 4} 
</tr><tr> 
{/if} 

Nach der foreach-Schleife fügen Sie einfach eine Tabellenzeile hinzu, um die letzte Zeile zu vervollständigen.

Ich hoffe, dass dies jemand hilft.

0
{foreach from=$foo item=bar name=humbug} 
{$smarty.foreach.humbug.index} 
{$smarty.foreach.humbug.iteration} 
{/foreach} 

oder

{foreach from=$foo item=bar name=berlin} 
{$smarty.foreach.berlin.index} 
{$smarty.foreach.berlin.iteration} 
{/foreach} 
0

können Sie verwenden {counter}

{counter} verwendet wird, eine Zählung auszudrucken. {counter} wird sich an die Zählung bei jeder Iteration erinnern. Sie können die Anzahl, das Intervall und die Richtung der Zählung einstellen, sowie bestimmen, ob den Wert drucken soll oder nicht. Sie können mehrere Counter gleichzeitig unter ausführen und für jeden einen eindeutigen Namen angeben. Wenn Sie keinen Namen angeben, der Namen „default“ verwendet wird

Quelle: http://www.smarty.net/docsv2/en/language.function.counter.tpl

Verbrauch:

{counter start=0 print=false assign="count"} 

<ul> 
{foreach from=$listing.products item="product"} 
    {counter} 
    {if $count === 1} 
    <p>Count is 1</p> 
    {/if} 
{/foreach} 
</ul>