AddOn


Einfaches URL-Rewrite

Beschreibung

Dieses AddOn ist eine Erweiterung des Standard-Rewriters und nutzt den Extension Point URL_REWRITE. Es soll im Wesentlichen nur als exemplarische Einführung in die Funktionsweise des Rewriters und als Gerüst für die Entwicklung komplexerer Rewriter dienen.
Zur Manipulation des Frontend-Output wird eine Erweiterung des Extension Point FE_OUTPUT genutzt.
Der Artikel-URL wird automatisch generiert in der Form: article_id-clang-name.html.

Ein URL hat in Redaxo die Normalform index.php?article_id=ID&clang=CID mit Verweis auf die Artikel-Id ID und die Sprach-Id CID. In der Regel soll stattdessen jeder Artikel einen “Wunsch-URL” erhalten, z. B. mit Hinweisen auf Themenkategorien, Artikelinhalt, Site-Struktur usw. In diesem AddOn werden dazu die Id, der Sprach-Code und der Name des Artikels herangezogen. – Dieses AddOn lässt auch die Nutzung von Links in Normalform zu.

RewriteRule in der .htaccess-Datei
Links auf Artikel werden üblicherweise in der Form RewriteRule ^(.*)$ index.php?%{QUERY_STRING} [L] umgeleitet. Da Redaxo keinen entsprechenden Artikel hat, landet die Umleitung auf dem Site-Startartikel.

Setzen des Wunsch-URLs
Dazu ist eine Erweiterung des Extension Point URL_REWRITE erforderlich. Die am Extension Point aufgerufene Funktion gibt den Wunsch-URL zurück. Im Backend wird sie nur im Content-Kontext eines Artikels (edit, metainfo, functions) aufgerufen und liefert für dessen Anzeige den Wert der Variablen $_SERVER[‘REQUEST_URI’]. Im Frontend wird sie nur innerhalb der Funktion rex_getUrl($article_id,$clang_id) aufgerufen und liefert (z. B. in Templates oder Modulen) den URL eines Artikels.

Manipulation des Frontend-Outputs
Sie erfolgt durch eine Erweiterung des Extension Point FE_OUTPUT. Die am Extension Point aufgerufene Funktion zeigt den aktuellen Artikel im Frontend an. Letzterer ist gemäß RewriteRule zunächst der Site-Startartikel. Am Extension Point werden hier stattdessen Inhalt und Sprachversion des Artikels ermittelt und dargestellt, der dem angezeigten Link entspricht. Auch die Ergebnisse der Funktionen rex_article::getCurrentId() und rex_clang::getCurrentId() werden entsprechend korrigiert.

Ausblick auf komplexere Wunsch-URLs
Der hier beschriebene Rahmen kann beibehalten werden. Die folgenden Aufgaben sind aber anders als hier zu lösen.
Für die Konstruktion des Wunsch-URL aus Artikel-Id und Sprach-Id im Backend bietet sich ein Rückgriff auf den path-Parameter des Artikels sowie auf den Artikel-Cache an.
Zu einem Link auf eine Seite im Frontend ist der zugehörige Artikel samt Sprachversion zu ermitteln. Das Ergebnis muss eindeutig und der Ermittlungsaufwand möglichst gering sein. Wird der URL z. B. als zusätzlicher Artikelparameter (Meta Info) mitgeführt, liefert ein SQL-Select auf die Tabelle rex_article den Artikelinhalt. Die Sprachversion kann im URL, aber auch z. B. in einer Session-Variablen mitgeführt werden.


Umsetzung

Wolfgang Busch

An der Windmühle 3
38173 Dettum

busch-dettum.de


Versionen

1.2.3

Für REDAXO
^5.1.0
Veröffentlicht am
07.11.2017

Neue Behandlung der Normalform-URLs

1.2.2

Für REDAXO
^5.1.0
Veröffentlicht am
17.10.2017

Überarbeitung der Beschreibung

1.2.1

Für REDAXO
^5.1.0
Veröffentlicht am
12.10.2017

Für den Normalform-URL wird jetzt der Redirect auf den NotFound-Artikel sauberer durchgeführt.
Außerdem ist der Quellcode etwas gestrafft.

1.2.0

Für REDAXO
^5.1.0
Veröffentlicht am
28.09.2017

Die Werte der Funktionen rex_article::getCurrentId() und rex_clang::getCurrentId werden jetzt entsprechend dem angezeigten Artikel angepasst.

1.1.0

Für REDAXO
^5.1.0
Veröffentlicht am
08.09.2017

Ersatz für die nicht mehr “funktionierenden” Funktionen rex_article::getCurrentId() und rex_clang::getCurrentId().
Verlegung der function get_article() von der class url_rewrite in die class fe_output.
Offline-Artikel werden nicht mehr angezeigt; stattdessen der Notfound-Artikel.

1.0.0

Für REDAXO
^5.1.0
Veröffentlicht am
13.07.2017