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: 594

Re:

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: 594

Re:

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: 594

Re:

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

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.741
Webseite

Re:

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


1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMSMS
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

Offline

Fußzeile des Forums

Powered by FluxBB