Sortierung in CONTENT-Objekten
| Autor | Nachricht |
|---|---|
|
Verfasst am: 08. 01. 2012 [00:29]
|
|
|
LiaraAlis
Themenersteller
Dabei seit: 07.01.2012
Beiträge: 8
|
Hi zusammen, ich hoffe, ihr könnt mir ein wenig mit TypoScript behilflich sein. Ich habe mir mit TypoScript ein CONTENT-Objekt gebastelt, was Global Partner und Sponsoren in der linken Spalte anzeigen soll. Diese werden aus einer Seite gelesen, in denen die Partner und Sponsoren aufgelistet werden. Hier erst einmal das TypoScript: TYPOSCRIPT lib.partnerSponsors = CONTENT lib.partnerSponsors { table = tt_content wrap = <h2>{$partnerSponsorsTitle}</h2><div id="partnerSponsorSlider">|</div> select { selectFields = image, image_link, altText, titleText where = (colPos = 0 OR colPos = 2) pidInList = {$partnerSponsorsPageIDs} orderBy = sorting languageField = sys_language_uid } renderObj = COA renderObj { 5 = IMAGE 5 { wrap = <div>|</div> file.import.listNum = 0 file.import = uploads/pics/ file.import.field = image file.maxW = 190 file.maxH = 100 altText.field = altText titleText.field = titleText imageLinkWrap = 1 imageLinkWrap { enable.ifEmpty.typolink.parameter.field = image_link enable.ifEmpty.typolink.parameter.listNum = 0 typolink.parameter.field = image_link typolink.parameter.listNum = 0 typolink.extTarget = {$styles.content.links.extTarget} } } } } Hierbei ergibt sich bei mir eine kleine Schwierigkeit bei der Sortierung der Inhalte: Wie in dem Script angegeben, soll nach dem Feld "sorting" sortiert werden, was zwar an sich auch funktioniert, aber ich ein Problem mit der Sortierung bekomme, wenn ich aus mehreren Seiten oder aus mehreren Spalten auslese. So wird erst die Spalte mit "colPos=2" ausgelesen und dann erst die mit "colPos=0". Wenn ich aus zwei Seiten die Inhalte auslese, werden die Inhalte durcheinander geschmissen. Ich würde gerne Einfluss darauf haben, aus welcher Spalte und von welcher Seite der Inhalt zuerst dargestellt werden soll. Hat jemand eine Idee, wie ich das am besten umsetzen könnte? Vielen Dank schon einmal im Voraus! Viele Grüße, Alexander Pankow |
|
Verfasst am: 08. 01. 2012 [17:14]
|
|
|
Chrissli
Dabei seit: 19.04.2010
Beiträge: 297
|
Hallo Alex, da bleiben dir vermutlich nur 2 Möglichkeiten: 1. Aus der DB-Abfrage zwei machen und dann selbst irgendwie zusammenbauen 2. du kannst auch mehrere Sortierkriterien angeben: TYPOSCRIPT select { selectFields = image, image_link, altText, titleText where = (colPos = 0 OR colPos = 2) pidInList = {$partnerSponsorsPageIDs} orderBy = sorting ASC, colPos ASC languageField = sys_language_uid } würde die Einträge nach Sorting sortieren und bei Gleichwertigen zuerst Inhalte aus Spalte 0, dann aus Spalte 2 nehmen Wenn du das umdrehts würde zuerst Inhalte aus Spalte 0 nach Sorting sortiert ausgegeben, anschließend die aus Spalte 2 Mit ASC bzw. DESC kannst du angeben ob aufsteigend bzw. absteigend sortiert werden soll ( Standard ist aufsteigend, deshalb muss dies nicht zwingend mit angegeben werden ) Vielleicht hilft dir das ja weiter God's in his Heaven -
All's right with the world! |
|
Verfasst am: 08. 01. 2012 [17:34]
|
|
|
LiaraAlis
Themenersteller
Dabei seit: 07.01.2012
Beiträge: 8
|
Hi, vielen Dank für die Antwort - das geht ja schon einmal in die richtige Richtung. Funktioniert das auch mit der Page UID, sodass ich praktisch drei Sortierkriterien angebe? Auch wenn die PageID in der Hinsicht kaum ein zuverlässiges Sortierkriterium ist, sollte es zumindest bei zwei Seiten funktionieren (eine dritte Seite brauche ich bisher nicht). EDIT: Vergess' das mit der Page UID - ich habe die Sortierung in deinem Beispiel mal umgedreht, sodass es jetzt so aussieht: TYPOSCRIPT select { selectFields = image, image_link, altText, titleText where = (colPos = 0 OR colPos = 2) pidInList = {$partnerSponsorsPageIDs} orderBy = colPos ASC, sorting ASC languageField = sys_language_uid } Das bringt genau das, was ich brauche: Die Sponsoren werden zuerst angezeigt und dann die Partner und die Spalte mit "colPos=0" wird zuerst genommen: PERFEKT! Vielen Dank! Grüße, Alex [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 08.01.2012 um 17:43.] |
|
Verfasst am: 21. 01. 2012 [18:05]
|
|
|
LiaraAlis
Themenersteller
Dabei seit: 07.01.2012
Beiträge: 8
|
Ich habe nun eine dritte PageID angegeben, nun stellt sich das Problem dar, dass die Sortierung jetzt wieder vorhauen wird. Ziel ist, dass ich beeinflussen kann, welche Seite zuerst dargestellt wird (Also die Reihenfolge der PageIDs bestimmen), derzeit werden alle durcheinander geschmissen. Du meintest, ich könnte es ggf. mit zwei Abfragen machen. Wie aber genau? Wenn da jemand eine Idee hat, wäre ich wirklich dankbar darüber! Vielen Dank schon einmal im Voraus! Grüße, Alex |
|
Verfasst am: 23. 01. 2012 [21:01]
|
|
|
Chrissli
Dabei seit: 19.04.2010
Beiträge: 297
|
Vielleicht hast du noch ein paar Zusatzinfos: Wieso hast du auf colPos 0 und 1 verteilt, wenn du dann wieder verquirlst? Eine Spalte Sponsoren und eine Partner, oder? Nach welchem Prinzip möchtest du sortieren? Denkbar wäre z.b. Zuerst die betroffenen Seiten ( {$partnerSponsorsPageIDs} ) nach sorting und anschließen innerhalb der einzelnen Seiten nach sorting. Womit wir wieder bei der Frage nach der colPos-Aufteilung wären. God's in his Heaven -
All's right with the world! |
|
Verfasst am: 24. 01. 2012 [00:48]
|
|
|
LiaraAlis
Themenersteller
Dabei seit: 07.01.2012
Beiträge: 8
|
Chrissli schrieb: Wieso hast du auf colPos 0 und 1 verteilt, wenn du dann wieder verquirlst? Eine Spalte Sponsoren und eine Partner, oder? Du meinst sicherlich 0 und 2. ^^ Nein, ganz so einfach ist das nicht. Lass mich erklären: Es gibt insgesamt 2 - 3 Seiten für die Partner und die Sponsoren: Es gibt eine Seite für die Partner des Vereins und eine Seite für Partner der Veranstaltung (letztere optional). Am besten guckst du dir das einfach mal live an: http://convention.cosday.de/partner-und-sponsoren.html Die Sponsoren oben kommen aus dieser Seite. Die Partner des Vereins aus einer Seite aus einem anderen Seitenbaum und die der Veranstaltung in einer nicht sichtbaren Seite. So habe ich die Möglichkeit, die Partner und Sponsoren nur an einer Stelle pflegen zu müssen und sie überall aktualisiert werden. Chrissli schrieb: Nach welchem Prinzip möchtest du sortieren? Denkbar wäre z.b. Zuerst die betroffenen Seiten ( {$partnerSponsorsPageIDs} ) nach sorting und anschließen innerhalb der einzelnen Seiten nach sorting. Womit wir wieder bei der Frage nach der colPos-Aufteilung wären. Im Prinzip ganz einfach (in genannter Reihenfolge): 1. Die Seite nach definierter Reihenfolge (zuerst die Sponsoren, dann die Partner der Veranstaltung, anschließend die des Vereins) 2. Nach colPos (0 zuerst, anschließend 2. also ASC) 3. Nach sorting aufsteigend Punkt 2 und 3 sind soweit kein Problem nur kann ich die Sortierung der Seite nicht definieren. Leuchtet das jetzt eher ein? Wenn nicht, frag nochmal nach. Vielen Dank für deine Hilfe!!! Grüße, Alex [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 24.01.2012 um 00:48.] |
|
Verfasst am: 24. 01. 2012 [08:45]
|
|
|
LuP
Dabei seit: 12.04.2007
Beiträge: 279
|
Hallo Alex, LiaraAlis schrieb: Du meintest, ich könnte es ggf. mit zwei Abfragen machen. Wie aber genau? Wenn da jemand eine Idee hat, wäre ich wirklich dankbar darüber! ich würde es so machen: TYPOSCRIPT lib.partnerSponsors = COA lib.partnerSponsors { 10 = CONTENT 10 { table = tt_content select { selectFields = image, image_link, altText, titleText where = (colPos = 0 OR colPos = 2) pidInList = {$sponsorsPageID} orderBy = colPos ASC, sorting ASC languageField = sys_language_uid } renderObj = COA renderObj { 5 = IMAGE 5 { wrap = <div>|</div> file.import.listNum = 0 file.import = uploads/pics/ file.import.field = image file.maxW = 190 file.maxH = 100 altText.field = altText titleText.field = titleText imageLinkWrap = 1 imageLinkWrap { enable.ifEmpty.typolink.parameter.field = image_link enable.ifEmpty.typolink.parameter.listNum = 0 typolink.parameter.field = image_link typolink.parameter.listNum = 0 typolink.extTarget = {$styles.content.links.extTarget} } } } wrap = <h2>{$sponsorsTitle}</h2><div id="sponsorsSlider">|</div> } 20 < .10 20 { select { pidInList = {$partnerPageID} } wrap = <h2>{$partnerTitle}</h2><div id="partnerSlider">|</div> } 30 < .10 30 { select { pidInList = {$vereinsPageID} } wrap = <h2>{$vereinsTitle}</h2><div id="vereinsSlider">|</div> } } VG, LuP |
|
Verfasst am: 24. 01. 2012 [13:04]
|
|
|
LiaraAlis
Themenersteller
Dabei seit: 07.01.2012
Beiträge: 8
|
NATÜRLICH! Warum bin ich nicht selbst darauf gekommen? Es ist so einfach, aber auf das einfachste kommt man natürlich nicht. xD Danke für den Denkanstoß! Ich habe es ein wenig modifiziert und an meine Bedürfnisse angepasst (z.B. brauche ich nur einen Wrap um alles). Und wenn ich eine Abfrage nicht brauche, setze ich die Konstante einfach nicht (oder gibt es da noch eine hübschere Lösung?). Grüße, Alex |



