Sie sind hier:   » ZMS home » Dokumentation » Details » How-To » Links » Deklarative URL

Lesbare, deklarative URLs erzeugen

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.

Screenshot www.medi-plaza.de

Deklarative URL: Schlagworte im URL-Namen statt ZMS-IDs. Beispiel-Link www.medi-plaza.de

Konfiguration

ScreenshotZoom (32KB)

Deklarative URL-Option in der ZMS-Konfiguration aktivieren

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:

String-Normalisierung

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()">&nbsp;</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>

Weitere Hinweise

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.

Warnhinweis bei Doppelungen von deklarativen URL-Namen (seit ZMS 2.10.)

ScreenshotZoom (25KB)

API-Links

ZMSObject.declHref2IndexHtml(REQUEST)
Gibt unter Berücksichtigung der Sprache für das aktuelle Objekt einen deklarativen Hyperlink auf die HTML-Indexseite (z.B. http://www.myzms.com/content/products/service) zurück.
ZMSObject.getHref2IndexHtml(REQUEST, deep=1)
Gibt unter Berücksichtigung der Sprache für das aktuelle Objekt den Hyperlink auf die erste gefundene HTML-Indexseite (z.B. http://www.myzms.com/content/e4/e16/index_ger.html) zurück. Über das Flag 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.