Sort-array mit smarty
Ich muss Sortieren ein array mit smarty. Ich versuche es mal mit dieser code :
Meine foreach:
{foreach $hooks->addblock as $addblock}
<ul>
{foreach $addblock|@sortby:"prio" as $value}
{$value@key}: {$value}
{/foreach}
</ul>
{/foreach}
Dem var_dump von $hooks->addblock
:
array(5) {
["filed_1"]=>
array(5) {
["id"]=>
string(7) "filed_1"
["title"]=>
string(6) "filed1"
["field"]=>
string(20) "This is test filed 1"
["size"]=>
int(740)
["prio"]=>
int(7)
}
["filed_2"]=>
array(5) {
["id"]=>
string(7) "filed_2"
["title"]=>
string(6) "filed2"
["field"]=>
string(20) "This is test filed 2"
["size"]=>
int(740)
["prio"]=>
int(6)
}
So, ich will zu Sortieren, array nach Wert prio
(num) Steigend, aber es sieht nicht aus, richtig!
Hier das Ergebnis:
Möchte ich die Zeile "feld_2" sein Erster. Aber ich finde keine Lösung.
Dies ist der Modifikator (modifier.sortby.php): http://www.smarty.net/forums/viewtopic.php?p=23628#23628
Ich habe auch einen immer wiederkehrenden Fehler:
[Sat Nov 24 20:04:52 2012] [error] [client 127.0.0.1] PHP Notice:
Uninitialized string offset: 0 in
/var/www/libs/plugins/modifier.sortby.php(33) : runtime-created
Funktion in Zeile 1
InformationsquelleAutor Julien | 2012-11-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies bietet einen Hinweis darauf, wie die sortby modifier arbeitet.
In der Dokumentation verlinkt wurde, sagt:
Ihre
prio
Feld ist ein integer, und zwar im PHP-können Sie viele Vorgänge transparent durch Ganzzahlen und strings, die Ankündigung darauf hin, dass sortby umgesetzt hat, Strings zu Sortieren, indem Sie Zugriff auf jeden Charakter individuell. Dieses kann möglicherweise nicht arbeiten mit einer ganzen Zahl.Also sollten Sie die
#
modifier:InformationsquelleAutor Lightness Races in Orbit
Tun Sie es nicht. Die Sortierung ist keine Aufgabe, die die template-engine zu tun. Es ist eindeutig business-Logik und muss gehen in die Steuerung ein.
Sortieren Sie das array in reinem PHP, bevor es übergeben wird Smarty, zum Beispiel mit
uasort($addblock, function($a, $b) { return $a['prio']>$b['prio']; });
Wohl, es ist eine Reine Präsentations-Sache. So oder so wird es eine interessante Rätsel.
Beachten Sie, dass Smarty templates kompiliert werden. Also, was ist der Unterschied zwischen dem Sortieren das array im controller und kompilierte template? Es ist nicht. Sortieren erfolgt ein wenig später, bei der Verwendung von Smarty-Ansatz.
InformationsquelleAutor Wolfgang Stengel