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 mit der Sprach-Id CID. In der Regel soll stattdessen jeder Artikel einen “Wunsch-URL” erhalten, aus dem Hinweise auf Themen-Kategorien und den Artikelinhalt entnommen werden können. In diesem AddOns werden dazu die Id, der Sprach-Code und der Name des Artikels herangezogen. Als Besonderheit: Auch ohne De-Installation dieses AddOns können URLs in Normalform benutzt werden.

RewriteRule in der .htaccess-Datei
Mit der folgenden RewriteRule werden alle nicht auf Dateien weisenden URLs auf die Datei /index.php umgeleitet: RewriteRule ^(.*)$ index.php?%{QUERY_STRING} [L] 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. Eingabeparameter der Funktion ist ein Objekt, das Id und Sprach-Id eines Artikels sowie den URL-Parameterstring enthält. Der zurückgegebene URL liefert den Wert der Variablen $_SERVER[“REQUEST_URI”] und den Rückgabewert der Funktion rex_getUrl($article_id). Im Backend wird die Funktion nur im Content-Kontext eines Artikels (edit, metainfo, functions) aufgerufen. Eingabeparameter sind daher dessen Id und Sprach-Id. Im Frontend entsprechen die Eingabeparameter der Funktion gemäß obiger RewriteRule den Parametern des Site-Startartikels. Daher muss der anzuzeigende Artikel samt Sprach-Id aus dem Wunsch-URL ermittelt werden. Außerdem muss der Frontend-Output so manipuliert werden, dass nicht (gemäß eingegebener Artikel-Id) der Site-Startartikel angezeigt wird.

Manipulation des Frontend-Outputs
Sie erfolgt durch eine Erweiterung des Extension Point FE_OUTPUT. Die am Extension Point aufgerufene Funktion hat keine Eingabeparameter. Ein Aufruf erfolgt nur im Frontend-Fall. Aus dem URL der anzuzeigenden Seite wird der zugehörige Artikel samt Sprach-Id ermittelt und zur Anzeige gebracht. Hinweis: In Templates und Modulen stehen Artikel-Id und Sprach-Id wie gewohnt im Artikel-Objekt $this zur Verfügung. Die Funktionen rex_article::getCurrentId() und rex_clang::getCurrentId() liefern aber Daten des Site-Startartikels. Als Ersatz werden die Funktionen my_article::getCurrentId() und my_clang::getCurrentId() angeboten.

Ausblick auf komplexere Wunsch-URLs
Beim URL-Rewrite sind die beiden folgenden Aufgaben zu lösen: 1) Konstruktion des Wunsch-URL aus Artikel-Id und Sprach-Id (Backend) 2) Ermitteln des Artikels samt Sprach-Id zu einem URL (Frontend und Output) Wenn der URL als zusätzlicher Artikel-Parameter (Metainfo) mitgeführt wird, ist Aufgabe 2 relativ einfach und effizient über ein SQL-Select auf die Tabelle rex_article lösbar. Zur Lösung von Aufgabe 1 bietet sich der path-Parameter des Artikels und ein Rückgriff auf den Artikel-Cache an.


Umsetzung

Wolfgang Busch

An der Windmühle 3
38173 Dettum

busch-dettum.de


Versionen

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