TYPO3-Testaccount
Testen Sie die aktuellste TYPO3-Version kostenlos und unverbindlich für einen Monat!

Jetzt testen!

Schulungen

jetzt buchen

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
ProfilWWW
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!
ProfilICQ
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.]
ProfilWWW
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
ProfilWWW
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!
ProfilICQ
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.]
ProfilWWW
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
Profil
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
ProfilWWW