Inhaltselemente auslagern und mehrfach einbinden

Ich zeige dir wie du wiederholende Elemente, wie das Copyright und Logo, zentral speichern und mit TypoScript so zur Verfügung stellst, das man es mehrfach einbinden kann.

In TypoScript kann man beliebige Objekte erstellen und speichern. Diese gespeicherten Stellen nennt man auch Typoscriptpfade. Jeder dieser Pfade kann ein TYPO3 Entwickler über ein ViewHelper ausführen.
Darüberhinaus gibt es in TypoScript zu fast jeden Problem bzw. zu jeder Aufgabe ein passendes TypoScript Objekt.

Das können wir uns zur Nutze machen und Inhaltselemente auslagern. Diese können dann vom Redakteur einfach bearbeitet werden.
Das ist nützlich um Inhalte die templatenah sind, wie das Copyright oder Logo, dem TYPO3 Redakteur zur Verfügung zu stellen.
Denkbar wäre auch, dass es Elemente gibt, die beispielsweise in einem Sidewidget auf mehreren Seiten eingebunden werden, zentral zu pflegen.

Copyright auslagern

Es ist sehr ineffizient, wenn man Textänderungen dem TYPO3 Entwickler überlässt. Du kennst es vielleicht, das jährliche umstellen des Copyright Jahres. Dabei kann das der Redakteur selbst und in TYPO3 geht das ganz einfach.

Wir erstellen ein neues TypoScript - Objekt, welches die Referenz eines Inhaltselementes enthält. Dafür gibt es das TypoScript - Objekt: RECORDS.
Für Elemente die wir zentral speichern, gibt es in TypoScript die Konvention das unter dem Typoscriptpfad: lib abzulegen.

lib.copyright = RECORDS
lib.copyright {
  tables = tt_content
  source = 1
  dontCheckPid = 1
}

Das wars!

Einfacher geht es wirklich nicht!

Was passiert hier?

Das TypoScript - Objekt: RECORDS hat für uns 3 zentrale Eigenschaften:

tablesName der Datenbanktabelle in der die Inhalte stehen
sourceID des Datensatzes. Datenbankspalte muss uid heissen
dontCheckPidDadurch wird der Inhalt auf allen Seiten gesucht und nicht nur auf der aktuellen Seite

Der Knackpunkt für die zentrale Speicherung ist die Eigenschaft: dontCheckPid. Wie du es schon im Basiskurs vom TYPO3 Redakteur in dem 2. Schritt gelernt hast, ist jeder Inhalt in TYPO3 einer Seite zugeordnet.
Das bedeutet auch, das standardmäßig jede Abfrage auf Inhalte die Prüfung auf die sogenannte PID, also ID der TYPO3 Seite, stattfindet. Oder mit anderen Worten, es werden standardmäßig nur Inhalte gesucht, die der aktuellen Seite zugeordnet sind. Wenn es keine aktuelle Seite im Kontext gibt, dann wird die Suchabfrage mit pid = 0 abgeschickt. 0 würde dann für den ROOT des Seitenbaum gelten.

ROOT des Seitenbaums in TYPO3

Alle Inhalte auf einer Seite auslesen

Der zweite Anwendungsfall ist es, wenn man ein Sidewidget einbinden möchte. Man kann das Sidewidget als Element bauen und es einer Inhaltsspalte zuordnen.

Aber was ist, wenn es auf jeder Seite eingebunden werden soll?

Dann könnte man dieses Element als Referenz auf jeder Seite setzen und hat auch so eine zentrale Speicherung erreicht.

Das ist jedoch umständlich und zeitaufwendig. Besser ist es, wenn man dem TYPO3 Entwickler ein Typoscriptpfad gibt, wo diese Elemente referenziert werden.
Natürlich geht das mit  TypoScript mit wenigen Zeilen Code. Das zentrale Objekt ist dafür CONTENT.

lib.widgets.exampleWidget = CONTENT
lib.widgets.exampleWidget {
  table = tt_content
  select {
    pidInList = <Seiten - ID>
    where = colPos = 0
    orderBy = sorting
  }
  renderObj = < tt_content
}

Für diese Aufgabe nutzen mit 3 Eigenschaften des CONTENT - Objektes. 

tableName der Datenbanktabelle wo die Inhalte stehen
selectKonfiguration der SELECT - Anweisung
select.pidInListListe von Seiten-IDs auf denen diese Inhalte stehen
select.whereEingrenzung der Datenbankabfrage, hier auf der Inhaltsspalte = 0 (Hauptinhaltsspalte)
select.orderBySortierung der Inhaltselemente, hier nach der TYPO3 Sortierungsspalte
renderObjObjekt der die Inhalte rendert, hier das TYPO3 Standardobjekt für Inhalte

Du siehst wie mächtig TypoScript ist und wieviel Macht es einem TYPO3 Integrator gibt. Dadurch ist das TYPO3 CMS sehr gut für komplexe Webseiten geeignet und die Arbeit in größeren Teams. Aufgaben lassen sich wirklich sehr gut auf TYPO3 Redakteure, Integrator und Entwickler aufteilen.