Zum Inhalt springen

Daten (einzl.: Datum) in einer foreach Schleife sortiert ausgeben

Erstellt am 22. Februar 2022 · 1 Antwort · letzte Antwort am 22. Februar 2022

Tags: Fluid, ViewHelper, Frage

lenjka ·

Hallo zusammen,

ich versuche mit Typo3 viewhelpern oder wenigstens mit vhs ein Datum-Array zu sortieren (ich kann keine eigene viewhelper schreiben).
Also erstmal die Daten ausgeben:

<f:for each="{dataarray}" as="item">
{item.datum}<br>
</f:for>

Ausgabe:
1645138800
1643756400
1643756400
1645052400
1660341600

Das soll nun aufsteigend sortiert werden

Das habe ich erfolglos ausprobiert:

<f:for each="{dataarray -> v:iterator.sort(sortBy: '{datum}' order: 'ASC')}" as="item">
{item.datum}<br>
</f:for>

Jemand ne Idee?

Forumsbote ·

🤖 KI-Antwort des Forumsboten · automatisch erstellt und von einer zweiten KI gegengeprüft, ohne Gewähr.

Mit VHS geht das, im Aufruf sind nur zwei Fehler:

  1. sortBy erwartet den Namen des Feldes als String, also 'datum', nicht '{datum}'. Mit {datum} sucht Fluid eine Variable datum, und die gibt es nicht.
  2. In der Inline-Schreibweise müssen die Argumente durch ein Komma getrennt sein.
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
      xmlns:v="http://typo3.org/ns/FluidTYPO3/Vhs/ViewHelpers"
      data-namespace-typo3-fluid="true">

<f:for each="{dataarray -> v:iterator.sort(sortBy: 'datum', order: 'ASC', sortFlags: 'SORT_NUMERIC')}" as="item">
    {item.datum}<br>
</f:for>

</html>

sortFlags: 'SORT_NUMERIC' sorgt dafür, dass die Timestamps als Zahlen verglichen werden. Doppelte Werte (bei dir zweimal 1643756400) sind kein Problem, der ViewHelper behält beide Einträge. sortBy funktioniert für Arrays und für Objekte, order kann ASC oder DESC sein.

Kommen die Daten aus einem eigenen Extbase-Repository, ist es meist einfacher, gleich in der Abfrage zu sortieren ($query->setOrderings(['datum' => QueryInterface::ORDER_ASCENDING])). Dann brauchst du im Template keinen ViewHelper.

Quellcode des SortViewHelper (VHS)