Zum Inhalt springen

Verschachtelte Selects ODER Alle IDs eines Ordners auslesen

Erstellt am 8. Oktober 2009 · 7 Antworten · letzte Antwort am 9. Oktober 2009

Tags: Frage

yokohama ·

Hallo zusammen,

auf Kundenwunsch überlege ich mir grade eine Möglichkeit, wie man alle Seiten (und deren Seiteninhalte) eines Baumstruktur-Abschnitts / Ordners auf einer Zusammenfassungsseite ausgeben kann.

Folgenden TS-Schnipsel habe ich mir dazu schon zusammengebaut, was als TemplaVoila FCE auch wunderbar funktioniert:

lib.zusammenfassung = COA
lib.zusammenfassung {
	10 = CONTENT
	10.table = tt_content
	10.select {
		leftjoin = pages ON (tt_content.pid = pages.uid)
		pidInList = 10,11,12,13,14
	}
}

Der Nachteil liegt natürlich auf der Hand: durch feste IDs ist das sehr unflexibel und für einen Redakteur kaum einsetzbar.

Ich überlege nun, wie ich dynamisch an die IDs kommen könnte, damit das FCE auch universell einsetzbar ist.

Mein erster Ansatz wäre eine verschachtelte DB-Abfrage gewesen, hat aber leider nicht so funktioniert wie ich es aus der PHP-Programmierung her kenne (vielleicht hab ich auch nur einen Syntaxfehler?).

pidInList = (
select {
	selectFields = uid
	where = pid=[ID DER ÜBERGEORDNETEN SEITE]
        }
)

Oder mach ich es mir zu kompliziert und TYPO3 bringt von Haus aus eine Funktion mit die quasi folgendes zurückgibt:
--> "gebe alle IDs der Seiten aus, die sich im selben Ordner wie die aktuelle Seite befinden!"

Am besten natürlich als kommagetrennte Liste 😉

So, ich würde mich freuen wenn mir jemand dazu einen Hinweis geben könnte! 🙂

yokohama ·

Hallo Kitsunet,

vielen Dank schonmal für deine Antwort 🙂

Ich habe grade nach Deinem Vorschlag versucht eine ID Liste per HMENU zu erstellen. Leider bisher ohne großartigen Erfolg.

Immerhin habe ich es mit ATagTitle.field = uid hinbekommen, die UID im Title-Tag auszugeben, aber wie "ersetze" ich generell den Linktext? o.O

Könntest Du mir ein wenig auf die Sprünge helfen? Bin noch relativ neu im Typo3-Thema und da fehlt mir einfach noch die Erfahrung. :o

yokohama ·

Super, danke, so wird mir echt eine kommagestennte Liste ausgegeben 🙂

Einer meiner Tests war ganz ähnlich, nur habe ich anstatt allStdWrap leider stdWrap verwendet, was nicht funktioniert hat.

Verwirrend diese ganzen Wraps ?_?#

Unbekannter Benutzer ·

Ja, manchmal schon. Aber eine gewisse Logik steckt schon drin. stdWrap an dieser Stelle bezieht sich auf den Linktext, dieser wird aber ja durch doNotShowLink komplett abgeschaltet, dadurch kommt dann (wahrscheinlich) auch der stdWrap nicht mehr zur Anwendung.

yokohama ·

Hallo nochmal,

die Hilfestellungen von Kitsunet haben mir schon sehr weiter geholfen, allerdings hänge ich grade wieder an einem Punkt, den ich im Vorfeld als "unkritisch" angesehen habe.
Nach mehreren Stunden Recherche und Testing habe ich mich dazu entschlossen, erneut hier im Forum nachzufragen.

Kommen wir nochmal zu meinem ersten Beispiel:

lib.zusammenfassung = COA
lib.zusammenfassung {
        10 = CONTENT
        10.table = tt_content
        10.select {
                leftjoin = pages ON (tt_content.pid = pages.uid)
                pidInList = 10,11,12,13,14
        }
}

Diese Ausgabe funktioniert.

Um das Ganze einfach zu halten verzichte ich im nächsten Beispiel auf ein dynamisches Auslesen der IDs und verwende ein von Hand befülltes Objekt ("IDLISTE")

IDLISTE = 10,11,12,13,14

lib.zusammenfassung = COA
lib.zusammenfassung {
        10 = CONTENT
        10.table = tt_content
        10.select {
                leftjoin = pages ON (tt_content.pid = pages.uid)
                pidInList = IDLISTE
        }
}

Das Funktioniert nicht.

Sehe ich das richtig? Die SELECT-Anweisung benutzt jetzt den String "IDLISTE" für die Abfrage und nicht den Inhalt "10,11,12,13,14"?

Was müsste ich denn nun anstellen, damit Typo3 die kommagetrennten IDs für den Datenbank-Query verwendet? Ich habe mir u.a. schon parseFunc angesehen, aber ich werde nicht wirklich schlau aus dieser Funktion.

Irgendwie denke ich noch zu sehr in PHP, scheinbar 🙁

Ich freue mich, wie immer, über jede Hilfe! 🙂

Unbekannter Benutzer ·

Nein, so funktioniert es nicht. Erstmal musst du wenn dann ein anderes Objekt kopieren, also so:

pidInList < IDLISTE

Aber ich bin nicht sicher ob das funktioniert, eigentlich müsstest du ein vollwertiges Objekt zuweisen, da pidInList stdWrap erlaubt, kannst du sowas machen:

IDLISTE = TEXT
IDLISTE.value = 10,11,12,13,14

...


pidInList.cObject < IDLISTE
...

Das kannst du dann später einfach in

pidInList.cObject < lib.zusammenfassung

ändern