Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 13. Dezember 2014 13:38

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 630

[GELÖST] Objekte sortieren

Hallo,

komme mal wieder mit Smarty/PHP nicht weiter.
Mit ListIt2 habe ich eine Menge Einträge erfasst, die alle über ein Zusatzfeld "Datum" verfügen. Jetzt möchte ich die Einträge vor der Ausgabe nach diesem Feld sortieren. Allerdings ist jeder Eintrag erst mal ein Objekt, das wiederum die Zusatzfelder in einem Array enthält, welcher dann wieder einen Array mit "name", "value" und "type" enthält. Und genau nach diesem "value" möchte ich die Objekte nun sortieren :-).
Ich habe mir schon verschiedenen Lösungen angeschaut, aber die Meisten sortieren keine multidimensionalen Arrays (und schon gar nicht in Verbindung mit Objekten). Die ListIt-eigene Funktion lässt ein Sortieren nach Zusatzfeldern leider nicht zu.

Gibts da einen Weg? Habs auch schon über die Toolbox (tbArraySort) probiert, aber erfolglos ...

Offline

#2 13. Dezember 2014 14:02

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 630

Re: [GELÖST] Objekte sortieren

Danke Goran! (auch wenn er es wahrscheinlich nicht mehr liest).
Das hier hat mich enorm weiter gebracht: http://www.i-do-this.com/snippets/Sorti … foreach/56
ABER:
Das Datum ist leider im Format %d.%m.%Y und nicht als String hinterlegt - dadurch wird erst nach Tagen sortiert (01.02., 01.03., 02.01. usw.). Wie ich es in Smarty und PHP umwandeln kann, weiß ich (strtotime) - aber mein UDT sieht so aus:

[== PHP ==]
if (!function_exists('do_sort')) {
    function do_sort($a, $b) {
        return $a->fielddefs[datum][value] < $b->fielddefs[datum][value];
    }
}
 
$data = $params['data'];
usort($data, 'do_sort');
$smarty->assign('sorted', $data);

Kann ich da den value schon ändern oder muss das vorher passieren? Wenn das läuft, dann hab ichs :-).

Beitrag geändert von jeff1980 (13. Dezember 2014 14:03)

Offline

#3 13. Dezember 2014 14:21

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 630

Re: [GELÖST] Objekte sortieren

Selbstgespräch :-)
Es klappt nun mit

[== PHP ==]
if (!function_exists('do_sort')) {
    function do_sort($a, $b) {
        return strtotime($a->fielddefs[datum][value]) < strtotime($b->fielddefs[datum][value]);
    }
}
 
$data = $params['data'];
usort($data, 'do_sort');
$smarty->assign('sorted', $data);

Manchmal ist es echt einfacher als man denkt.

Edit: Der Vollständigkeit halber noch für die Ausgabe:

[== SMARTY ==]
{sort data=$items}
{foreach from=$sorted item=item}

...

{/foreach}

Beitrag geändert von jeff1980 (04. November 2015 13:06)

Offline

#4 13. Dezember 2014 18:22

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [GELÖST] Objekte sortieren

Danke fürs Selbstgespräch und deine Lösung wink!

Offline