Nodes sortieren by Child-Property

Hallo zusammen,

folgende Situation:
Ich habe eine Auflistung von Events, welche die aktuellsten Events auflisten soll.
Die Events haben den Nodetype “Vendor.Site:Document.Event.Entry”
Jedes Event beinhaltet einen Nodetype “Vendor.Site:Content.EventHeading” in welchem das Datum des Events in eine Property “dateStart” eingetragen wird.
Nun zu meiner Frage:
Kann ich die Events einfach beim “Holen” schon sortieren:
${q(site).find(’[instanceof Vendor.Site:Document.Event.Entry]’).sort(‘Vendor.Site:Content.EventHeading[dateStart]’, ‘ASC’)}
oder muss ich diese nachher sortieren?

Vielen Dank schonmal und liebe Grüße,
Damian

Hallo Damian,

so einfach geht das meines Wissens leider nicht. Wenn das “dateStart” direkt in deinem Event wäre, kannst du einfach die Sort-Fuktion nutzen, um die Sortierung vorzunehmen. Wenns für dich also irgendwie möglich wäre, pack das dateStart vielleicht einfach in “Event.Entry”, wonach du auch in deiner Query suchst.

Sollte das für dich aus irgendwelchen Gründen nicht möglich sein, könntest du auch mit einer eigenen FlowQueryOperation arbeiten.
Also Quasi “q(site).find(…).customSortQuery(…).get()” oder so ähnlich.
Die eigenen Queries kannst du dir ganz einfach in PHP schreiben. Eine Anleitung dazu findest du hier: https://docs.neos.io/cms/manual/extending-neos-with-php-flow/custom-flowquery-operations

Dort bekommst du dann Quasi das Ergebnis der vorherigen Operation (find()) als Array mit Nodes, kannst über diese iterieren und so sortieren.
Eventuell kann das aber einen Performance-Nachteil haben. Je nachdem, wie viele Nodes sortieret werden müssen. Das musst du für dich selbst ausprobieren und rausfinden.

Ich hoffe, das hilft dir irgendwie weiter. Ansonsten melde dich gerne nochmal!

Viele Grüße
Niklas

1 Like

Ich würde auch empfehlen die relevanten Basisdaten in den Eventtype zu ziehen.

Was sonst theoretisch auch gehen müsste ist, direkt die Query auf die EventHeadings zu machen und sortieren und dann mit der parent-Operation alle Events zu bekommen.

2 Likes

Vielen Dank für eure Antworten!
Habe nun die zusätzlich von Sebastian vorgeschlagene Variante probiert. Funktioniert einwandfrei :slight_smile: