TYPO3 EXT: Dynamic Routing Pages
Die TYPO3 Extension "dynamic-routing-pages" ermöglicht es TYPO3-Benutzern dynamische URL-Routen für ihre Seiten zu erstellen. Diese Erweiterung ist besonders nützlich wenn man eine TYPO3-Website auf eine benutzerfreundlichere URL-Struktur umstellen möchten, ohne dass dabei die bestehenden Inhalte beeinträchtigt werden.
Die Ausgangslage
Seit TYPO3 9 wird für sprechende URLs ein neues System verwendet. Dabei wurde die Entscheidung gefällt, dass TYPO3 weniger "raten" sondern mehr "wissen" soll - damit inkonsistente URLs der Vergangenheit angehören. Da sprechende URLs (mal mehr, mal weniger) Relevanz für die Suchmaschineneoptimierung haben, hat dieser Aspekt auch an Bedeutung gewonnen. Da TYPO3 9 bereits vor geraumer Zeit erschienen ist, ist die Konfiguration für sprechende URLs an sich ein alter Hut.
Das Problem
In TYPO3 werden sprechende URLs in den Seiten selbst als `slug` hinterlegt.
Oft sind Webseiten, die mit TYPO3 gebaut wurden, komplexe Systeme in denen auch Datensätze verschiedenen Typs verlinkt werden. So sind z.B. auf dieser Seite hier die Blogbeiträge mit der Extension `news` umgesetzt worden. Damit solche Datensätze mit sprechenden URLs angesprochen werden können, gibt es in TYPO3 mehrere Möglichkeiten: Diese können unter dem Begriff `Routeenhancer` zusammengefasst werden.
Die Konfiguration der sprechenden URLs wird in einer (oder mehrereren) yaml Datei gespeichert, die im TYPO3 Kontext als `site`-Configuration bezeichnet wird.
Leider gibt es für die Konfiguration dieser Datei nur ein sehr eingeschränktes Interface im TYPO3 Backend, in dem man insbesondere die Konfiguration der `Routeenhancer` weder sieht, noch schreiben kann.
Von TYPO3 wird empfohlen, die `Routeenhancer` auf bestimmte Seiten einzuschränken, damit das System nicht auf jeder Seite diese Optionen auswerten muss (Stichwort: limitToPages). Dabei ist TYPO3 ohne diese Extension darauf angewiesen, daß man die Seiten (uid) kennt, auf der die Konfiguration greifen sollen.
Aus verschiedenen Gründen, z.B.
- Entwicklungs- und Livesystem
- großen Seitenbäumen
- mehreren Sites in einem System
kann es ausgesprochen schwierig und aufwendig sein, diese Seiten (uids) zuverlässig zu benennen.
routeEnhancers: NewsPages: type: Extbase # add every page-ID that contains a News Plugin limitToPages: - 23 - 42 - 123 - 242 extension: News plugin: Pi1 ...
Die Extension als Lösungsansatz
Die Extension dynamic_routing_pages bietet hier das nötige Bindeglied, damit man eben nicht die genauen Seiten angeben muss. Sie bietet verschiedene Möglichkeiten, damit man `limitToPages` nicht setzen muss und trotzdem die meisten Vorteile bekommt. Derzeit gibt gibt es vier Konfigurationsmöglichkeiten (`withPlugin`, `containsModul`, `withSwitchableControllerAction`, `withCType`), damit die Extension TYPO3 die nicht gegebene Information zur Verfügung stellt. So wird aus der Einschränkung auf eine bestimmte Seite elegant eine Einschränkung auf jede Seite, auf der ein bestimmtes Plugin eingebunden ist.
route:/news/{news_title} routeConfig: news_title: type: Extbase dynamicPages: withPlugin: news_pi1 pattern: '([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)' valueMap: 1: news_category 2: news_title
Über ein paar kleine SQL-Queries setzt die Extension dann in der Konfiguration die fehlende Information ein. Als Bonus benutzt sie einen Cache, um nicht bei jeder Anfrage die Information neu aufbauen zu müssen. Man kann sie also relativ bedenkenlos einsetzen.
Fazit
Die Extension von Sebastian Michaelsen ist eine feine neue Erweiterung des TYPO3-Universums. Vielleicht wird es auf Dauer auch bessere Möglichkeiten der Site-Konfiguration im TYPO3-Core geben. Einen völlig anderen Ansatz zeigt die Extension `solr`. Die Site-Konfiguration entspricht einer (eingeschränkten) TCA-Konfiguration, und `solr` zeigt auf, wie man diese erweitern kann.
Die Extension ist derzeit (gut) nur über Composer installierbar.