Dieses Beispiel verwendet Index erhalten Sie 11 Ergebnisse. Siehe meine Notizen
{foreach from=$entries key=i item=topic name=foo} // note (1)
{if $smarty.foreach.foo.index == 10} // notes (2.1, 2.2 and 2.3)
{php}break;{/php} // note (2.4)
{/if}
{if $topic.topic_style == question} // note (3)
<li>
<a href="topic.php?id={$topic.id}">{$topic.title}</a>
</li>
{/if}
{/foreach}
Anmerkungen
(1) Wenn Sie den Schlüssel nicht verwenden, brauchen Sie ihn nicht zu definieren.
(2.1) Wenn Sie Index der Beginn der Schleife ist 0, mit Iteration stattdessen beginnt der Zähler bei 1, für einfaches inkrementelles Zählen verwenden Sie Iteration statt Index .
(2.2) Während es in Ordnung ist, ==, != und so weiter in Smarty-Code zu verwenden, ist es aus Gründen der Lesbarkeit besser, eq, neq, ist, ist nicht, und, oder. die Liste geht weiter, siehe die Smarty-Dokumentation für eine vollständige Liste.
(2.3) Zu den 11 Ergebnissen habe ich oben angemerkt, dass die Index . Dies würde im obigen Beispiel einfach deshalb geschehen, weil die Zahl 10 ist. Um ein Ergebnis von 10 zu erhalten und den Bruch zu drucken, hätten Sie 9 als Wert verwenden müssen.
(2.4) Verwenden Sie stattdessen den Smarty-Break. Sie müssen nicht unbedingt ein Smarty-Plugin schreiben, es gibt zahlreiche Plugins, die Sie installieren können.
(3) Genau wie in PHP müssen Sie Variablen, Ganzzahlen, Konstanten oder boolesche Werte nicht in Anführungszeichen setzen, eine Zeichenkette ist nichts davon und sollte in Anführungszeichen gesetzt werden.
Die alte Revision
{foreach from=$entries item=topic name=foo}
{if $smarty.foreach.foo.iteration eq 10}
{break}
{/if}
{if $topic.topic_style eq "question"}
<li>
<a href="topic.php?id={$topic.id}">{$topic.title}</a>
</li>
{/if}
{/foreach}
Ich habe dies überdacht, und als Ergebnis habe ich herausgefunden, einen Weg zu überspringen, die Notwendigkeit zu brechen insgesamt, die Schleife wird einfach am letzten Iteration zu beenden. warum ich nicht denken, dieser früher ich weiß nicht, aber trotzdem hier ist der beste Weg, den Sie eine Schleife ohne brechen beenden können. lte y le bedeuten beide weniger als oder gleich, genauso wie PHP <=
Sie können auch Folgendes verwenden neq (nicht gleich) und machen die Zahl 11, aber wenn Sie mehr Ergebnisse im Array haben, würde es einfach überspringen Iteration 11 und weiter zum Ende des Arrays. Wenn Sie nur 10 Elemente im Array haben, können Sie jede der drei Möglichkeiten verwenden, aber der Einfachheit halber würde ich in diesem Fall bei den Operatoren "Kleiner als gleich" bleiben.
Sie werden feststellen, dass diese foreach-Schleife sehr viel übersichtlicher und verständlicher ist
Die bessere Revision
{foreach from=$entries item=topic name=foo}
{if $smarty.foreach.foo.iteration lte 10 AND $topic.topic_style eq "question"}
<li>
<a href="topic.php?id={$topic.id}">{$topic.title}</a>
</li>
{/if}
{/foreach}
Zusammenfassung
Kurz gesagt, beide Wege werden funktionieren, ich habe oben eine Option erwähnt, die den less than-Operator mit Index verwendet, was der bevorzugte Weg zur Auswertung wäre.
Jedoch durch die Umstellung auf Iteration Sie ermöglichen eine geradlinige Schleife, Sie müssen nicht darüber nachdenken, ist, dass der richtige Wert, seine einfache, ich möchte 10 Ergebnisse, so Iteration Gleichung 10 .
Kleiner Abstecher hierher : Ein weiteres Problem mit Index über Iteration ist, dass der Index eine Tabelle nicht korrekt anzeigt, wenn Sie Modulus verwenden. Die Verwendung von Iteration mit Modulus wird Ihr Leben einfacher machen. Es ist das Äquivalent zum Setzen eines Zählers, weil der Zeilenindex nicht tut, was Sie brauchen.
Durch die Verwendung von Smarty-Operatoren anstelle der PHP-Pendants können Sie eine besser lesbare Vorlagendatei schreiben. Denken Sie daran, dass die Vorlagen nicht für die PHP-Logik, sondern für die Frontend-Designer gedacht sind. Für einen PHP-Programmierer sind die Operatoren eine Selbstverständlichkeit, aber für einen Designer sind sie vielleicht ein Fremdkörper in seiner normalen Arbeit.