Link-Funktionen

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.