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 nahe am Template 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:
tables | Name der Datenbanktabelle in der die Inhalte stehen |
source | ID des Datensatzes. Datenbankspalte muss uid heissen |
dontCheckPid | Dadurch 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, dass 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 der Seitenbaum gelten.
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.
table | Name der Datenbanktabelle, wo die Inhalte stehen |
select | Konfiguration der SELECT - Anweisung |
select.pidInList | Liste von Seiten-IDs auf denen diese Inhalte stehen |
select.where | Eingrenzung der Datenbankabfrage, hier auf der Inhaltsspalte = 0 (Hauptinhaltsspalte) |
select.orderBy | Sortierung der Inhaltselemente, hier nach der TYPO3 Sortierungsspalte |
renderObj | Objekt 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.