Dieses Tutorial erläutert die Einrichtung der Site Configuration, um im nächsten Schritt einen wichtigen Teil der Routing Enhancers erklären zu können: den Extbase Plugin Enhancer. Wer sich bereits mit der Site Configuration beschäftigt hat, kann dieses Tutorial also getrost überspringen.
Falls du erfahren möchtest, wie man einen Slash oder .html am Ende der URL erhält, findest du die Antwort im dritten Teil der Routing-Reihe.
Einleitung
"Sprechende URLs", also für Menschen gut lesbare Adressen einer Website, wurden in TYPO3 bisher mit Erweiterungen Dritter gelöst – etwa mit RealURL oder auch CoolURI. Doch seit Version 9.5 LTS beherrscht der TYPO3-Core selbst die Umschreibung von URLs.
Inhaltsverzeichnis
- Ein paar Fakten zum neuen Routing:
- Vorteile und Umfang der Site Configuration:
- Einrichtung einer Site Configuration
- Die Pflichtangaben einer neue Site Configuration sind:
- Warte einen Moment! 'applicationContext'?
- Über das URL-Segment
- FAQ zum neuen TYPO3 Routing
- Wie erhalte ich einen Slash (oder .html) am Ende jeder URL?
- Ändert sich das URL-Segment, wenn ich eine Seite umbenenne?
- Wie kann ich das geänderte URL-Segment auf alle Unterseiten übertragen?
- Kann ich eine Elternseite komplett aus dem URL-Segment der Unterseiten entfernen
Ein paar Fakten zum neuen Routing:
- Das ganze basiert auf der Symfony Routing Component.
- Nach Einrichtung einer Site Configuration funktioniert bereits die Umschreibung von Seiten ("beispiel.de/home" statt "beispiel.de/index.php?id=1").
- Mit einer Site Configuration erhalten alle Seiten ein neues Feld in den Seiteneigenschaften: das URL-Segment (in etwa vergleichbar mit dem früheren realurl_pathsegment).
- Auch Übersetzungen von Seiten werden berücksichtigt.
- Für das Umschreiben von Extbase-Plugins (z.B. News) oder anderer URL-Parameter benötigt man Routing Enhancers.
- Routing Enhancers werden manuell in der Site Configuration (config.yaml) ergänzt.
Da sich die Behandlung übersetzter Seiten in TYPO3 v9 grundlegend geändert hat, wird RealURL für diese und weitere TYPO3-Versionen nicht mehr aktualisiert werden! Höchste Zeit also, sich mit dem neuen Routing in TYPO3 zu beschäftigen.
Vorteile und Umfang der Site Configuration:
- Bequeme Verwaltung mehrerer Websites innerhalb einer TYPO3-Installation (alle Seiten mit Einstellung is_siteroot).
- Einrichtung von Sprachen und Fallbacks je Website. Toll hier: Man kann die bestehende Domain bei Übersetzungen um Sprachkürzel ergänzen ("my-domain.com/fr/") oder auch eine ganz eigene Domain für eine Sprache vergeben ("mon-domain.fr").
- Behandlung von HTTP-Fehlermeldungen (z.B. "Zeige Inhalt von Seite" oder ein eigenes Fluid-Template).
- Auch sehr praktisch: die sogenannten Static Routes ermöglichen z.B. die Bereitstellung einer individuellen robots.txt je Website.
- Alle Konfigurationen einer Website werden in einer gemeinsamen YAML-Datei gespeichert.
- Domain Records werden überflüssig.
Einrichtung einer Site Configuration
Im TYPO3-Backend rufen wir das Modul "Seitenverwaltung > Sites" auf. Hier werden alle root-Seiten aufgelistet. Wählt hier den Button "Add new site configuration for this site".
Die Pflichtangaben einer neue Site Configuration sind:
- Der Site Identifier (wird als Name eines neuen Unterordners in typo3conf/sites/ verwendet, beachtet also bitte die hier angegebenen Vorgaben)
- Der Entry Point: verwendet am besten eine komplette URL mit Protokoll und Domain. Wenn ihr nur einen Slash verwendet, kann es zu Problemen mit dem Error Handling kommen! Für lokale Entwicklungsumgebungen könnt ihr eine Variante anlegen.
- Das Einrichten der Sprache: auch wenn eure Website nur eine einzige Frontend-Sprache besitzt, muss diese konfiguriert werden! Diese Angaben werden von TYPO3 dann etwa im HTML-Tag ausgegeben (<html lang="en">).
Ich beschränke mich hier auf die notwendigen Einstellungen für das Routing. Hier gibt es weitere Informationen zu den Möglichkeiten: https://docs.typo3.org/
Die fertige Konfiguration eurer Website findet ihr nach dem Speichern unter /typo3conf/sites/
Die erstellte config.yaml sieht dann ungefähr so aus:
rootPageId: 7
base: 'https://mydomain.de/'
baseVariants:
-
base: 'http://mydomain.test/'
condition: 'applicationContext == "Development"'
languages:
-
title: English
enabled: true
languageId: '0'
base: /
typo3Language: default
locale: en_US.UTF-8
iso-639-1: en
navigationTitle: English
hreflang: en-US
direction: ''
flag: en-us-gb
errorHandling: { }
routes: { }
Warte einen Moment! 'applicationContext'?
Für die lokale Entwicklung habe ich einen alternativen Entry Point (baseVariants) gesetzt. Dieser greift im applicationContext, welcher z.B. in der .htaccess gesetzt werden kann. In der Default-.htaccess von TYPO3 ist dies bereits vorbereitet. Sie muss nur angepasst und aktiviert werden:
RewriteCond %{HTTP_HOST} ^mydomain\.test$ RewriteRule .? - [E=TYPO3_CONTEXT:Development]
Der aktuelle Application Context erscheint im TYPO3 Backend in der Anwendungsinformation (obere Leiste):
Übrigens: die baseVariants lassen sich auch für die in der config.yaml eingerichteten Sprachen eurer Website nutzen. Ein Beispiel findet ihr im dazugehörigen Changelog-Eintrag.
Über das URL-Segment
Wenn eine Site Configuration vorhanden ist, wird TYPO3 automatisch URL-Segmente für den dazugehörigen Seitenbaum erstellen.
Dabei wird der Seitentitel verwendet und in Kleinbuchstaben umgewandelt. Leerzeichen werden durch Bindestriche ersetzt, Sonderzeichen entfallen.
In der Suchmaschinenoptimierung (SEO) werden die lesbaren URL-Segmente Slugs genannt.
Wenn zwei oder mehr Seiten auf der gleichen Seitenbaum-Ebene denselben Namen besitzen, wird TYPO3 die URL-Segmente mit einer Endung versehen, damit alle URLs eindeutig zuweisbar bleiben (z.B. /seitentitel-1).
Alle URL-Segmente können in den Seiteneigenschaften angepasst werden:
- entweder automatisch per Button, wobei die aktuelle Pfadstruktur in das Feld kopiert wird
- oder komplett manuell
So könnte die Unterseite, die im Seitenbaum unter "Buchhandel > Non-Book > Poster" liegt, trotzdem unter "domain.de/poster" aufrufbar sein, indem man die anderen Seiten manuell aus dem URL-Segment dieser Seite entfernt.
Selbstverständlich gibt es für alle übersetzten Seiten ein eigenes Feld für das URL-Segment.
FAQ zum neuen TYPO3 Routing
Zwischen TYPO3 v9 und v10 gibt es teils Unterschiede, die in den einzelnen Abschnitten entsprechend beschrieben sind.
Wie erhalte ich einen Slash (oder .html) am Ende jeder URL?
Diese Frage habe ich in einem eigenen Tutorial beantwortet.
Ändert sich das URL-Segment, wenn ich eine Seite umbenenne?
Nein. Das URL-Segment wird zwar erstmalig aus dem Seitentitel generiert, danach werden beide Daten von TYPO3 aber unabhängig voneinander behandelt. Du kannst das URL-Segment jederzeit in den Seiteneigenschaften ändern – über eine manuelle Eingabe oder durch Verwendung des "Neuberechnen"-Buttons am Eingabefeld.
Diese Arbeitsweise hat sich auch mit TYPO3 v10 nicht geändert.
Wie kann ich das geänderte URL-Segment auf alle Unterseiten übertragen?
In TYPO3 v10 geschieht das automatisch: wenn du das URL-Segment einer Seite anpasst, werden auch die Slugs aller Unterseiten aktualisiert. Darüber hinaus werden für die aktuelle Seite und alle Unterseiten automatisch Weiterleitungen im Redirects-Modul eingerichtet. Als Redakteur wirst du darüber in einer System-Nachricht informiert und kannst eine oder beide Anpassungen wieder rückgängig machen, falls es nötig ist.
TYPO3 v9 bietet diese Funktionalität nicht. Die Änderung muss in jeder Seite einzeln erfolgen. Leider lassen sich die URL-Segmente auch nicht im Single Table View gemeinsam ändern – zumindest der Button zur automatischen Rekalkulation funktioniert nicht. Hier scheint TYPO3 der nötige Kontext zu fehlen.
Allerdings gibt es zwei Extensions, die euch bei der Pflege von Slugs in TYPO3 v9 unterstützen können:
Kann ich eine Elternseite komplett aus dem URL-Segment der Unterseiten entfernen
Nur manuell, in jeder Unterseite einzeln. Es ist aktuell noch nicht möglich, eine normale Seite automatisch immer aus den Slugs herauszuhalten. Ein möglicher Workaround: die Seiten-Typen mit einem doktype-Wert von mehr als 200 werden im URL-Segment immer ignoriert. Dazu zählen Ordner, Trennzeichen (Spacer) und Papierkörbe. Bedenkt dabei aber, dass sich diese Seitentypen nicht im Frontend aufrufen lassen!