Der Content Manager und die Template Engine rufen Link-Funktionen auf, wenn Versionen exportiert oder in der integrierten, der separaten Vorschau sowie der Live-Vorschau angezeigt werden. Die Funktionen geben Ihnen die Möglichkeit, Link-Tags zu modifizieren und erlauben damit URL-Rewriting. Für jedes Tag, das einen URI (Uniform Ressource Identifier) enthalten kann, werden zwei Funktionen aufgerufen, jeweils einer für das öffnende und das schließende Tag.
Während des Exports Tcl-Prozeduren aufzurufen, kann die
Exportgeschwindigkeit negativ beeinflussen. Die Link-Funktionen sind
daher voreingestellt abgeschaltet. Sie können aktiviert werden, indem
der Systemkonfigurationseintrag
export.wantLinkCallback
auf YES gesetzt wird. Mit dem Wert NO lassen sich
die Funktionen wieder deaktivieren.
Die Namen der Funktionen lauten linkCallback für das öffnende
und linkCallbackCloseTag für das schließende Tag.
Die linkCallback-Prozedur
Der Content Manager und die Template Engine rufen die
linkCallback-Prozedur entsprechend der
folgenden Definition auf:
proc linkCallback {tagName srcId absSrcPath \
expId absExpPath relExpPath attrList} {}Die Argumente haben die folgende Bedeutung:
tagName: der Name des Link-Tags.srcId: die ID der Quelldatei, also der Datei, das das Link-Tag enthält.absSrcPath: der absolute Pfad der Quelldatei.expId: die ID der zu exportierenden Datei.absExpPath: der absolute Pfad der zu exportierenden Datei.relExpPath: der in Bezug auf auf die Quelldatei relative Pfad der zu exportierenden Datei.attrList: die Liste der Attribute des Tags. Jedes Attribut ist wiederum eine Liste mit folgenden Elementen:attrName: der Name des Tag-Attributs.attrValue: der Wert des Tag-Attributs.linkId: die ID des Links.destId: die ID der Zieldatei.absDestPath: der absolute Pfad der Zieldatei (nur bei URI-Attributen, ansonsten die leere Zeichenkette).relDestPath: der in Bezug auf die Quelldatei relative Pfad der Zieldatei (nur bei URI-Attributen, ansonsten die leere Zeichenkette).
Bitte beachten Sie, dass ein Argument eine leere Zeichenkette
enthält, wenn der Wert nicht existiert. Dies trifft beispielsweise bei
externen Links auf destId zu. Die Prozedur muss eine Liste
mit folgenden Elementen zurückgeben:
tagName: der gegebenenfalls geänderte Name des Link-Tags.attrList: die Liste der gegebenenfalls geänderten Attribute des Tags. Jedes Attribut ist wiederum eine Liste mit folgenden Elementen:attrName: der Name des Tag-Attributs.attrValue: der Wert des Tag-Attributs.reserved1: der Wert dieses Elements wird ignoriert.reserved2: der Wert dieses Elements wird ignoriert.reserved3: der Wert dieses Elements wird ignoriert.reserved4: der Wert dieses Elements wird ignoriert.
Dass der Content Manager und die Template Engine die Elemente
reserved1 bis reserved4 in den Subelementen
von attrlist erwartet, hat den Vorteil, dass Sie die
Ergebnisliste leichter erzeugen können: sie kann aus dem ersten und dem
letzten Argument von linkCallback zusammengesetzt
werden.
Beispiel (bis Version 6.7.0)
Das folgende Beispiel zeigt, wie man bei externen Links das
http-Präfix in ein https-Präfix umwandeln
kann.
proc linkCallback {tagName srcId absSrcPath expId absExpPath
relExpPath attrList} {
if { "$absExpPath" == "" || "$tagName" != "a" } {
return [list $tagName $attrList]
}
set newList ""
foreach attribute $attrList {
set key [lindex $attribute 0]
set value [lindex $attribute 1]
if { "$key" == "href" || "$key" == "title" } {
regsub "^http:" $value "https:" value
}
lappend newList [list $key $value {} {} {} {}]
}
return [list $tagName $newList]
}
proc linkCallbackCloseTag {tagName expId absExpPath} {
return $tagName
}Ab CMS Fiona 6.7.1: Die mitgelieferte
Link-Callback-Prozedur kann je zu verarbeitendem Tag eine
kundenspezifische Prozedur aufrufen, die auf einfache Weise registriert
werden kann (siehe das folgende Beispiel). Diese Funktionalität ist
in der Datei share/script/cm/serverCmds/linkCallback.tcl
dokumentiert.
Beispiel (ab Version 6.7.1)
::linkCallback::registerHandler "a" "addBlankTarget"
namespace eval ::linkCallback {
proc addBlankTarget \
{tagName srcId absSrcPath expId absExpPath relExpPath attrList} {
if {[existsAttr href] && [string match "http*" [attrValue href]]} {
addMissingAttrValue target _blank
return [dataAsCallbackResult]
}
return [unmodified]
}
}
Die linkCallbackCloseTag-Prozedur
Die linkCallbackCloseTag-Prozedur wird vom Content
Manager und von der Template Engine entsprechend der folgenden
Definition aufgerufen:
proc linkCallbackCloseTag {tagName expId absExpPath} {}Die Argumente haben die folgende Bedeutung:
tagName: der Name des Link-Tags.expId: die ID der zu exportierenden Datei.absExpPath: der absolute Pfad der zu exportierenden Datei.
Als Rückgabewert erwarten die beiden CMS-Applikationen den gegebenenfalls geänderten Namen des Link-Tags.