Aus Peformance-Gründen werden Inline-Links primär nicht transformiert - auch bei aktivierter Option 'Deklarative URLs'. Man kann diese per getCustomBodyContent-Hook ex-post syntaktisch korrigieren.
HTML-Ausgabe des Text-Körpers verändern
Die API-Funktion getBodyContent() erzeugt die HTML Präsentation eines Content-Objektes. Diesen HTML-Strom kann man über einen hook nachträglich manipulieren.
Die API-Funktion ZMSObject.getBodyContent() prüft beim Erzeugen des HTML-Strom, ob im Kontext ein Objekt bzw. eine Methode namens getCustomBodyContent() existiert und übergibt dieser abschließend ggf. den HTML-Ausgabestrom (sog. "hook"). Wenn man ein entsprechendes Python-Script oder eine DTML-Methode getCustomBodyContent auf Template-Ebene einsetzt, kann man die HTML-Ausgabe verändern. Im folgenden Beispiel (Python-Script) werden inline-Links in die deklarative Syntax umgewandelt.
Der folgende Code stammt von T. Kraemer : [zms-developers] Declarative URL's - Workaround:
# Parameter List: html, REQUEST #
try:
start = 'href=\"./'
end = '\"'
while True:
i = html.find(start)
j = html.find(end, i+len(start))
if i < 0 or j < 0:
break
href = html[i+len(start):j]
ids = href.split('/')
ids[-1:] = ids[-1].split('#')
# ob = REQUEST['ZMS_THIS']
ob = context.this()
for id in ids:
if not id or id.startswith('index'):
continue
if id == '..':
ob = ob.getParentNode()
else:
ob = getattr(ob, id, None)
html = html
if not ob:
# Invalid href
href_new = href
break
else:
href_new = ob.getHref2IndexHtml(REQUEST)
html = html.replace('./'+href, href_new)
return html
except Exception, err:
return err
Erstellt von: Dr. Frank Hoffmann , SNTL Publishing , erstellt am: 15.09.2010 , zuletzt geändert: 22.09.2011
