Seiten-Teaser

Armin Bartsch, Dienstag, 10. März 2009

Ein einfacher Seiten-Teaser mit alphabetischer rekursiver Auflistung.

Seiten-Teaser sind auf (fast) jeder Seite zu finden. Sie dienen dazu Unterseiten übersichtlich darzustellen damit der User leicht und schnell zur gesuchten Information kommt.

Häufig werden Extensionen eingesetzt um einen Seiten-Teaser in die Seite einzubinden. Allerdings kann man auch leicht einen Seiten-Teaser mit TypoScript erstellen, mit dem Vorteil das alle Konfigurationsmöglichkeiten die TypoScript bietet genutzt werden können.

TYPO3 bietet ja als "Spezielle Elemente" bereits eine Sitemap mit verschiedenen Menü Typen an, diese wird um einen weiteren Typen "Seiten-Teaser" erweitert mit dem wir einen alphabetischen Seiten-Teaser erstellen können.

Hier finden Sie eine Alphabetische Sitemap die mit dem TypoScript unten erzeugt wird.

Neuer Menü-Typ unter Sitemap

Um den neuen Seite-Teaser auch leicht als CONTENT einbinden zu können, wird dieser unter Spezielle Elemente als neuer Menü-Typ angelegt.

Das anlegen erfolgt im TSCONFIG der obersten Seite des Seitenbaums, bzw. in der Seite ab wo die Einstellung gelten soll.

TCEFORM.tt_content.menu_type.addItems { 7 = Seiten-Teaser (alphabetisch) }
  1. TCEFORM.tt_content.menu_type.addItems {
  2.   7 = Seiten-Teaser (alphabetisch)
  3. }

Der Seiten-Teaser wird dem key 7 zugeordnet, da 1-6 bereits genutzt werden.

tt_content.menu.20.7

Alle weiteren Angaben erfolgen nun im setup eines Templates.

Die Werte werden dem TLO (Toplevel-Object) tt_content.menu.20.7 übergeben.

tt_content.menu.20.7 > tt_content.menu.20.7 = COA tt_content.menu.20.7 { # Hier erfolgt der weitere Inhalt }
  1. tt_content.menu.20.7 >
  2. tt_content.menu.20.7 = COA
  3. tt_content.menu.20.7 {
  4. # Hier erfolgt der weitere Inhalt
  5. }

HMENU special directory

Den Seiten-Teaser erstellen wir mit Hilfe des cObject HMENU, allerdings unterstützt HMENU nicht die alphabetische Auflistung bei rekursiver Anwendung. Zwar stehen die special und keywords für ähnliche Anforderungen zur Verfügung, allerdings lassen sich die nicht so konfigurieren das direkt eine alphabetische Auflistung erreicht werden kann.

Um an Ziel zu gelangen müssen nun zwei Schritte hintereinander ausgeführt werden. Der erste Schritte besteht darin, die notwendigen Daten mit dem cObject TMENU auszulesen. Allerdings erfolgt keine Ausgabe sondern notwendige Daten (Seite-uid) werden als Komma-Liste in den internen Zwischenspeicher register:site_uid geschrieben.

10 = HMENU 10 { special = list special.value.field = pages excludeDoktypes = 6 excludeUidList = 1 1 = TMENU 1 { expAll = 1 NO { doNotShowLink = 1 stdWrap.cObject = LOAD_REGISTER stdWrap.cObject { site_uid.field = uid site_uid.dataWrap = {register:site_uid},| } } } 2 < .1 3 < .1 4 < .1 5 < .1 6 < .1 7 < .1 8 < .1 9 < .1 10 < .1 }
  1. 10 = HMENU
  2.   10 {
  3.     special = list
  4.     special.value.field = pages
  5.     excludeDoktypes = 6
  6.     excludeUidList = 1
  7.     1 = TMENU
  8.     1 {
  9.       expAll = 1
  10.       NO {
  11.         doNotShowLink = 1
  12.         stdWrap.cObject = LOAD_REGISTER
  13.         stdWrap.cObject {
  14.           site_uid.field = uid
  15.           site_uid.dataWrap = {register:site_uid},|         
  16.         }
  17.       }
  18.     }
  19.     2 < .1
  20.     3 < .1
  21.     4 < .1
  22.     5 < .1
  23.     6 < .1
  24.     7 < .1
  25.     8 < .1
  26.     9 < .1
  27.     10 < .1
  28.   }

Ausgabe konfigurieren

Nach dem die erforderlichen uid der Seiten im register:site_uid gespeichert sind werden die zur Ausgabe erforderlichen Daten sortiert über das cObject CONTENT eingelesen.

Über den Parameter pidInList im select wird bestimmt welche Datensätze gelesen werden, register:site_uid enthält die benötigten Datensätze als Komma-Liste. Mit orderBy wird die Sortierung festgelegt.

Im cObject renderObj wird die Formatierung für die Ausgabe festgelegt.

20 = CONTENT 20 { table = pages select { orderBy = title pidInList.data = register:site_uid } stdWrap { wrap = <dl>|</dl> required =1 } renderObj = COA renderObj { 10 = TEXT 10 { field = title typolink.parameter.field = uid dataWrap = <dt>|</dt> append = TEXT append { field = abstract // description wrap = <dd>|</dd> } } } }
  1.   20 = CONTENT
  2.   20 {
  3.     table = pages
  4.     select {
  5.       orderBy = title
  6.       pidInList.data = register:site_uid
  7.     }
  8.     stdWrap {
  9.       wrap = <dl>|</dl>
  10.       required =1
  11.     }
  12.     renderObj = COA
  13.     renderObj {
  14.       10 = TEXT
  15.       10 {
  16.         field = title
  17.         typolink.parameter.field = uid
  18.         dataWrap = <dt>|</dt>
  19.         append = TEXT
  20.         append {
  21.           field = abstract // description
  22.           wrap = <dd>|</dd>
  23.         }       
  24.       }
  25.     }
  26.   } 
  27.  

Fazit

Es ist muss nicht immer eine Extension zum Einsatz kommen. Einige Aufgaben können ohne viel Aufwand mit TypoScript gelöst werden. Der Vorteil ist die volle Kontrolle und die umfangreiche Konfigurationsmöglichkeit von TypoScript.

Das TypoScript Seiten-Teaser ist nur ein kleines Beispiel, ohne die Möglichkeiten der Konfiguration voll auszuschöpfen..

Sponsored by:

ideenwerft webhosting
ideenwerft caretaker