Deklarative URL: Schlagworte im URL-Namen statt ZMS-IDs. Beispiel-Link www.medi-plaza.de
Autor: Dr. F. Hoffmann, 18.02.2008
Die von ZMS erzeugten Zope-Objektpfade sind primär nicht "sprechend" und vielleicht für die Kunden-Kommunikation ungeeignet. Ohne die Objekteindeutigkeit aufzugeben, kann man mit der Option "Deklarative URLs" einen quasi parallelen Namens-Baum aufbauen und damit eine lesbare Verpfadung ermöglichen.
Deklarative URL: Schlagworte im URL-Namen statt ZMS-IDs. Beispiel-Link www.medi-plaza.de
Wenn man in der ZMS-Konfiguration die Option "deklarative URLs" aktiviert, wird standardmässig der Kurztitel für die Erreugung des URL-Namens herangezogen. Um vom Kurztitel abweichende URLs zu erzeugen bzw. um Doppelungen zu vermeiden, empfiehlt sich die Einführung eines zusätzliches Meta-Attribut vom Typ Zeichenkette (String), das den URL-Namen darstellen soll:
Beide Attribute erfüllen denselben Zweck: die API-Funktion getDeclId() aus dem Modul zmsobject.py erzeugt mit der Routine id_quote() einen 7bit normalisierten URL-Namen.
# id_quote() normalisiert den URL-Namen #
<dtml-var "id_quote('Bau-Ökologie')">
Der per obigem Beispiel erzeugte URL-Name lautet /bau_oekologie; Umlaute oder sz-Ligatur (ß) werden in entsprechende Zweibuchstaben-Kombinationen verwandelt, grundsätzlich in Kleinbuchstaben. All anderen Sonderzeichen, auf der Trenn-Strich werden in einen Unterstrich verwandelt.
Analog der API-Funktion getHref2IndexHtml() lässt sich mit declHref2IndexHtml() der sprechende Dokument-Link ausgeben - siehe folgendes Code-Beispiel;
# declHref2IndexHtml() #
<!-- DEKL.URL-MECHANISMUS: TOC-LIST-BEISPIEL -->
<dtml-let thisObj="this()">
<dtml-in "getNavElements(REQUEST)">
<dtml-let highlightThis="id in
thisObj.absolute_url().split('/')">
<dtml-in "getLevel()"> </dtml-in>
<a href="<dtml-var "declHref2IndexHtml(REQUEST)">
<dtml-if highlightThis><strong></dtml-if>
<dtml-var "getTitlealt(REQUEST)">
<dtml-if highlightThis></strong></dtml-if>
</a>
</dtml-let>
</dtml-in>
</dtml-let>
ZMS muss die aus diversen deklarativen Strings zusammengesetzte URL in Objekt-IDs eindeutig auflösen. daher darf es keine Doppelungen der Namen geben. Seit ZMS 2.10 gibt das Redaktions-Interface eventuelle Doppelungen aus.
API-Links
deep wird die Navigation in die Tiefe auf die erste nicht leere HTML-Seite erzwungen. Eine HTML-Seite ist nicht leer, wenn sie darstellbare Elemente (Textabschnitt, Abbildungen) enthält.