Seiteninhalte vererben in TYPO3

Oft macht es Sinn, auf verschiedenen Seiten die gleichen Inhalte anzubieten, z.B. Teaser oder Werbebanner im Randbereich einer mehrspaltigen Webseite. Dabei sollte man natürlich nicht auf jeder Seite die gleichen Inhalte einpflegen, sondern die Inhalte vererben: Wenn die Inhaltsspalte der aktuellen Seite keinen Inhalt hat, wird der Inhalt von den Eltern-Seiten genommen. Die Vererbung funktioniert rekursiv, d.h. wenn auch die übergeordnete Seite keinen Inhalt hat, wird bei deren Eltern-Seite nachgeschaut usw.

Je nachdem, ob man TemplaVoila einsetzt oder nicht, muss man unterschiedlich vorgehen:

TYPO3 mit TemplaVoila

Vererbung mit der Extension kb_tv_cont_slide

In der TemplaVoila Datenstruktur wird der vorhandene TypoScript Code mit diesem ersetzt:

10 = RECORDS
10.source.postUserFunc = tx_kbtvcontslide_pi1->main
10.source.postUserFunc.field = field_idOfTheField
10.source.postUserFunc.languageFallback = 0
10.tables = tt_content

field_idOfTheField ist ein Platzhalter und muss mit dem Namen der Inhaltsspalte ersetzt werden.

Vorteile der Extension gegenüber der Lösung mit TypoScript:

  • language fallback: Bevor auf die Inhalte der Eltern-Seite zurückgegriffen wird, wird geprüft, ob zu der angegebenen Sprache (im
    Beispiel 0, also die Default Sprache) Inhalte vorliegen.
  • Seitenelemente, für die die Verknüpfung entfernt wurden (d.h. sie wurden im Seiten-Modul „gelöscht“), werden nicht mehr angezeigt

Weitere Erweiterungen:

Die Erweiterung ad_tvcontentslide basiert auf kb_tv_cont_slide, vererbt aber nur Inhalte, bei denen eine Checkbox aktiviert ist. Diese Erweiterung macht Sinn, wenn man die Inhalte nur auf wenigen Seiten vererben möchte.

Die Erweiterung jb_stop_slide integriert in die Seiteneigenschaften eine Checkbox, die das Vererben der Inhalte über kb_tv_cont_slide stoppt.

Über TypoScript

Dieser TypoScript Code kommt in die TemplaVoila Datenstruktur:

10 = CONTENT
10 {
  table = tt_content
  slide = -1
  select {
    where = colPos=0
    andWhere = deleted=0
    andWhere = hidden=0
    orderBy = sorting
  }
  wrap = <!--TYPO3SEARCH_begin--> | <!--TYPO3SEARCH_end-->
}

Angepasst werden muss nur die colPos, hier kommt der Wert rein, der in Tag oldStyleColumnNumber steht.

ACHTUNG: Elemente, die gelöscht wurden (d.h. deren Verknüpfung wurde entfernt), werden trotzdem ausgegeben! Deshalb muss man immer die „nicht verwendeten Elemente“ händisch löschen!

Die TypoScript Lösung habe ich hier gesehen.

TYPO3 ohne TemplaVoila

Hier kann man das sogenannte „Content Sliding“ einsetzen. Dieses gibt es seit TYPO3 Version 4.

Mehr zum Content Slide im TYPO3-Wiki.

temp.myBorderCol < styles.content.getBorder
temp.myBorderCol.slide = -1

Mit dem „Content Sliding“ ist es auch möglich, die Elemente von den Eltern-Seiten zu sammeln und alle auszugeben. D.h. je tiefer man navigiert, umso mehr Elemente werden angezeigt. Dies funktioniert mit „styles.content.getBorder.slide.collect“.

3 Kommentare zu “Seiteninhalte vererben in TYPO3”

  1. Super Beitrag! Content Sliding war mich bis jetzt unbekannt und hat mich gerade echt gerettet :)

  2. Danke für den Beitrag.

    temp.myBorderCol.slide = -1 funktioniert bei mir. Allerdings werden die Inhalte auf den Unterseiten immer in der default-Sprache angezeigt. Nur auf der Seite, auf der die Inhalte direkt sind, wird die korrekte Sprache angezeigt.

    Überall, wo die Inhalte ererbt wurden, sieht man sie in default-Sprache. Irgendwelche Ideen, warum das sein könnte?

    Danke,
    Peter

  3. Hallo Peter,
    dieses Verhalten hatte ich noch nicht. Wenn die Sprachen sonst richtig konfiguriert sind, sollte auch die Vererbung funktionieren. Wenn du TYPO3 Version 6 einsetzt, würde ich sagen, das ist ein Bug, denn diese Version scheint mir noch etwas unausgereift. In der Vergangenheit scheint es Bugs mit dem Feld „media“ bei der Vererbung gegeben zu haben, aber du möchtest ja normale Inhalte vererben.
    Ich fürchte, ich kann dir nicht helfen.

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.