TYPO3 6.2 – Variierender Content anhand der System Kategorien

Hallo miteinander,
ich hatte in einem Projekt das Problem, dass ich anhand des bestehenden Inhalts einer Seite, Anzeigen in der rechten Spalte einblenden sollte, die explizit anderen Themen betreffen als die, die auf der Seite selbst behandelt werden. Diese Anzeigen sollten trotzdem aus einem globalen und zentralen Pool gezogen werden, damit das Einrichten vereinfacht wird.

Da habe ich natürlich gleich an die tollen TYPO3 System Kategorien gedacht. 🙂
Ich habe das Ganze per Typoscript gelöst, man könnte sicherlich auch das recht schnell und einfach mit einer Extbase Extension lösen. (Als ich da am Tüfteln war hatte ich oft den Gedanken das meine Extension jetzt eigentlich schon fertig sein könnte, verdammt! :D).

Nach mehreren Versuchen und Verbesserungen war das Endergebnis folgendes Snippet

lib.right.5 = COA_INT
lib.right.5 {
  4 = CONTENT
  4{
    table = tt_content
    select {
      # ID der Seite wo die content Elemente gespeichert sind 
      pidInList = 160
      join = sys_category_record_mm ON tt_content.uid = sys_category_record_mm.uid_foreign
      # Damit keine Doppeten Elemente ausgegeben werden.
      groupBy = uid
      # Per default wird aus dem ganzen Pool geschöpft 
      where = sys_category_record_mm.uid_local NOT IN (0) AND sys_category_record_mm.tablenames = 'tt_content'
      where.override.cObject = TEXT
      # Per getText levelfield categories(da steht eigentlich nur die Anzahl der Kategorien) werden tatsächlich die relationen über die mm Tabelle aufgelöst und eine Komma separierte Liste der Kategorie id's erstellt.(Hätte ich das nur früher gewusst, grrr)
      # Je nachdem wie man es sich wünscht kann man slide setzten oder nicht, wenn nicht gesetzt wird nur die eigentliche Seite als Bezugspunkt genommen, mit slide orientiert man sich auch an den übergeordneten Seiten
      where.override.cObject.data = levelfield:-1,categories,slide
      # hier verwenden wir nun die Komma separierte Liste der Kategorie id's um die Elemente auszuschließen die der Kategorie der Seite entsprechen Bsp. Seite hat Kat 1, Anzeigen die NUR Kat 1 hat wird nicht angezeigt.
      # Das Ganze kann man natürlich auch umkehren und sagen es werden nur die Angezeigt die auch Kategorien der Seite angehören, in dem man das NOT IN switcht. 
      where.override.cObject.noTrimWrap = |sys_category_record_mm.uid_local NOT IN (|) AND sys_category_record_mm.tablenames = 'tt_content'|
      # Wir ändern die Where Klausel nur wenn tatsächlich auch Kategorien für die Seiten bestimmt worden sind.
      where.override.if.isTrue.data = levelfield:-1,categories,slide
 
      # Anzahl der Anzeigen
      max = 3
      # Ausgabe random so, dass jede mal dran kommt.
      orderBy = rand()
    }
  }
}

P.S. Falls ihr damit wirklich Anzeigen auf der Seite zeigen wollt, empfehle ich DCEs. Damit könnt ihr eure Anzeigen frei gestalten und formatieren und die System Kategorien werden von Haus aus unterstützt wenn es in den Einstellungen angeschaltet wird.

Viel Spaß damit.

Tanti Saluti 😀

Ein Kommentar

Schreibe einen Kommentar zu Christoph Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Highlighting von Codes ist mit den Tags  [ts], [php], [html], [javascript], [xml] oder [code] möglich.