Sprechende URLs gehören mittlerweile zum festen Bestandteil technisch guter Webseiten. Mit CUBE CMS kann man die Struktur der sprechenden URL selbst festlegen. Das Ganze funktioniert sehr einfach über eine Regel.
In diesem Beispiel wird der Inhalt aus einem Feld ueberschrift
verwendet, um die sprechende URL zu erzeugen und in ein bestimmtes Feld zu schreiben. Sollte das Feld schon einen Inhalt haben, wird dieser nicht überschrieben. Das hat den einfachen Grund, dass man manchmal auch eine andere sprechende URL haben möchte als es die automatische Regel erzeugt.
Zuerst legt man unter "Administration > Regeln" eine neue Regel an. In diese Regel wird der folgende Inhalt kopiert. Es ist kein Fehler, dass dieser Code nicht mit einer öffnenden Klammer <?php
beginnt und mit ?>
endet. Das übernimmt die Regel-Funktion normalerweise selbst. Da wir in unserem Fall zwei Funktionen benötigen, erzeugen wir diese durch eine schließende und öffnende Klammer in der Mitte des Scripts.
- if( $value == '' ) {
- $inhalt = mb_strtolower(get_content('ueberschrift'), "UTF-8");
- } else {
- $inhalt = mb_strtolower($value, "UTF-8");
- }
- $mapping = array(
- // Buchstaben
- 'Ä' => 'Ae', 'ä' => 'ae', 'Æ' => 'Ae', 'æ' => 'ae',
- 'À' => 'A', 'à' => 'a', 'Á' => 'A', 'á' => 'a',
- 'Â' => 'A', 'â' => 'a', 'Ã' => 'A', 'ã' => 'a',
- 'Å' => 'A', 'å' => 'a', 'ª' => 'a', 'Þ' => 'B',
- 'þ' => 'b', 'Ç' => 'C', 'ç' => 'c', 'Ð' => 'D',
- 'È' => 'E', 'è' => 'e', 'É' => 'E', 'é' => 'e',
- 'Ê' => 'E', 'ê' => 'e', 'Ë' => 'E', 'ë' => 'e',
- 'ƒ' => 'f', 'Ì' => 'I', 'ì' => 'i', 'Í' => 'I',
- 'í' => 'i', 'Î' => 'I', 'î' => 'i', 'Ï' => 'Ii',
- 'ï' => 'ii', 'Ñ' => 'N', 'ñ' => 'n', 'Ò' => 'O',
- 'ò' => 'o', 'Ó' => 'O', 'ó' => 'o', 'Ô' => 'O',
- 'ô' => 'o', 'Õ' => 'O', 'õ' => 'o', 'Ø' => 'O',
- 'ø' => 'o', 'Ö' => 'Oe', 'ö' => 'oe', 'Œ' => 'Oe',
- 'œ' => 'oe', 'ß' => 'ss', 'Š' => 'S', 'š' => 's',
- '™' => 'TM', 'Ù' => 'U', 'ù' => 'u', 'Ú' => 'U',
- 'ú' => 'u', 'Û' => 'U', 'û' => 'u', 'Ü' => 'Ue',
- 'ü' => 'ue', 'Ý' => 'Y', 'ý' => 'y', 'ÿ' => 'y',
- 'Ž' => 'Z', 'ž' => 'z',
- // Zahlen
- '¹' => '1', '²' => '2', '³' => '3', '°' => '0',
- // Verschiedenes
- '¢' => 'cent',
- '€' => 'euro',
- '‰' => 'promille',
- '±' => 'plusminus',
- '×' => 'x', # Mal-Zeichen
- '–' => '-', # ndash
- '—' => '-', # mdash
- '-' => '-', # non breaking hyphen
- '•' => '.', # one dot leader
- '…' => '...', # ellipsis
- ' ' => '-', # space
- '_' => '-' # underscore
- );
- $inhalt = strtr( $inhalt, $mapping );
- $inhalt = preg_replace('/[^0-9a-z-$]/i', '', strtolower( $inhalt ) );
- return rule_url_helper( $inhalt );
- }
- function rule_url_helper( $rein )
- {
- $zurueck = str_replace('--', '-', $rein );
- if( strpos( $zurueck, '--' ) == true ) {
- $zurueck = rule_url_helper( $zurueck );
- }
- return $zurueck;
Damit die Regel greift, muss sie in einem Set einem Feld zugewiesen werden das bearbeitet werden soll.
Wir wollen in diesem Beispiel die sprechende URL in das Feld mit dem Feldname speaking_url
schreiben. In dem Set wird deshalb die Regel ausgewählt und als Feld speaking_url
eingetragen. Der Name des Feldes aus dem sich die Regel den Inhalt holen soll wurde in Zeile 2 der Regel bereits definiert.
Das Set muss dann noch der Beitragsart zugewiesen sein in der es aktiv sein soll. Dazu muss man in den Einstellungen einer Beitragsart das Set auswählen.
Was genau macht das Script?
Beim speichern eines Beitrags wird geprüft, ob ein Set für diese Beitragsart vorhanden ist. Danach wird für jedes Feld der Beitrasgart geprüft, ob es in dem Set enthalten ist.
Wenn es in der Beitragsart ein Feld mit dem Name speaking_url
gibt, wird die Regel ausgeführt. Am Anfang der Regel haben wir in Zeile 1 festgelegt, dass diese nur dann ausgeführt werden soll, wenn das Feld leer ist. In diesem Fall holt sich die Regel den Inhalt des Feldes ueberschrift
(Zeile 2). Sollte Inhalt vorhanden sein wird dieser verwendet. Der Grund hierfür ist, dass man manuell aus Versehen unerwünschte Zeichen eingeben könnte.
Der Inhalt wird nun auf einige der gängigsten Zeichen geprüft und diese werden durch alphanumerische Zeichen oder Buchstaben ersetzt. Das Mapping der Zeichen ist nur ein Beispiel und kann beliebig erweitert oder reduziert werden.
Bevor der Inhalt zurückgegeben wird, kommt eine Hilfsfunktion rule_url_helper()
zum Einsatz. Diese entfernt doppelte Bindestriche, damit nur noch einfache Bindestriche in der späteren URL enthalten sind.
Die nun gesäuberte und formatierte Zeichenkette wird in das Feld speaking_url
geschrieben. In der Ausgabe im Template kann damit dann eine sprechende URL ausgegeben werden.
Man kann die Formatierung an die eigenen Bedürfnisse und Wünsche anpassen.
HINWEIS: Die Regel im Beispiel erstellt keine sprechende URL die 1:1 in den Browser kopiert und aufgerufen werden kann, sondern lediglich den sprechenden Teil der URL. Die finale URL kann bzw. muss man sich nach seinen eigenen Vorgaben zusammenstellen.
Dies könnte im Template, je nachdem wie man es in der .htaccess
-Datei eingestellt hat, folgendemaßen aussehen.
- <a href="<?php echo C_FRONTEND_URL; ?>/<?php CB_DATA(array("field" => "speaking_url")); ?>.<?php CB_DATA(array("field" => "id")); ?>.html">Linktext</a>
Die Ausgabe sähe im Template dann etwa so aus:
- <a href="http://www.meine-domain.de/die-sprechende-url.123.html">Linktext</a>
Dass die ID in der URL steht hat einen wichtigen Grund. Zum einen ist sofort ersichtlich wo man den Inhalt im CMS findet. Man kann sich einfach die ID koieren und in die Schnellsuche kopieren. Zum anderen verlangt Google für Artikel die in Google-News gelistet werden sollen, dass eine eindeutige Zahl enthalten ist.