Tcl-Prozeduren zur Formatierung von Werten

Bei den NPSOBJ-Anweisungen insertvalue meta und var können Sie das CMS während des Exports eine Tcl-Prozedur ausführen lassen, um das Ergebnis der NPSOBJ-Anweisung zu modifizieren, bevor es in das Ausgabedokument eingefügt wird. Eine solche Tcl-Prozedur wird Formatter genannt.

Der anzuwendende Formatter kann mit einem formatter-Tag in der NPSOBJ-Anweisung spezifiziert werden. Beispiel:

<npsobj insertvalue="var" name="title" formatter="formatter_procedure_alias" />

Auch bei insertvalue dynamiclink kann ein Formatter angegeben werden. Link-Formatter sind jedoch ein spezieller Formatter-Typ, weil ihnen andere Argumente übergeben werden als den Standard-Formattern (letztere werden normalerweise auf Feldwerte angewendet).

Die Standard-Formatter befinden sich im Verzeichnis share/script/cm/serverCmds. Sie müssen im Systemkonfigurationseintrag export.tclFormatterCommands registriert worden sein, bevor sie verwendet werden können.

Die Prozedur, deren Alias formatter_procedure_alias ist, wird aufgerufen, wenn die NPSOBJ-Anweisung ausgewertet wird. Die Anweisung wird durch den Rückgabewert der Prozedur ersetzt.

Definition der Formatter-Prozedur

Eine Standard-Formatter-Prozedur wird folgendermaßen definiert (die Standard-Formatter befinden sich erst ab Version 6.7.1 im Namensraum formatter):

namespace eval ::formatter {
  proc meinFormatter {value type params} {
      return "meinFormatter wurde mit dem Wert $value, dem Typ $type\
              und den Parametern $params aufgerufen ."
  }
}

Das CMS übergibt der Prozedur die folgenden Argumente in der angegebenen Reihenfolge:

  • Das erste Argument, value, ist der Wert des durch name referenzierten Feldes; enthält die NPSOBJ-Anweisung auch das Tag-Attribut format oder separator, so wird der formatierte Wert verwendet.

  • Als zweites Argument, type, wird der Typ des Wertes übergeben. Hier gilt:

    • Ergibt der Wert eine Kontextliste (bei Datei- und Linklisten wie children oder superlinks, aber auch bei parent usw.), ist der Typ list.
    • Ist der Wert mit npsobj modifyVar zugewiesen worden, ist der Typ html.
    • Ergibt der Wert eine Link-Instanz, ist der Typ link.
    • Ergibt der Wert einen gültigen 14-stelligen Datumstring, so ist der Typ date.
    • In allen anderen Fällen ist der Typ string.
  • Das dritte Argument, params, ist eine Liste mit allen anderen Tag-Attributen und ihren Werten (einschließlich name, jedoch ohne insertvalue, formatter, format und separator); die Liste enthält paarweise die Tag-Attribut-Namen mit ihren jeweiligen Werten.

CMS Fiona wird mit den im Folgenden beschriebenen Formatter-Prozeduren ausgeliefert. Es sind hier die Alias-Namen aufgeführt, die in der NPSOBJ-Anweisung als Wert des formatter-Attributs angegeben werden können.

formatBlobLength

Aufgabe

Formatiert Dateigrößen menschenlesbar. Das Ergebnis ist eine möglichst kleine Zahl (<1000), die mit der entsprechenden Maßeinheit (KByte, MByte etc.) versehen ist.

Parameter (ab Version 6.7.1)

  • useBinaryPrefix: Ein Wahrheitswert (true oder false), mit dem die Art des Präfixes für die Maßeinheit bestimmt wird. Ist dieser Wert wahr (true), wird die Dateigröße (Bytes) durch 1024 geteilt und es werden binäre Präfixe verwendet (Ki, Mi, Gi, Ti). Ist der Wert false oder nicht angegeben, ist der Divisor 1000 und es werden SI-Präfixe verwendet (K, M, G, T).

  • maxSteps: Gibt die Anzahl der maximal durchgeführten Divisionen an. Wird hier beispielsweise 2 angegeben, werden auch Werte von mehr als 1000 (bzw. 1024) M(i)Bytes weiterhin als M(i)Byte angezeigt. Der Standardwert ist 2.

  • precision: Gibt die Anzahl der Nachkommastellen an. Der Standardwert ist 0.

  • separators: Gibt die Zeichen an, die als 1000er-Trennzeichen und Dezimalpunkt verwendet werden sollen (in dieser Reihenfolge). Wird nur ein Trennzeichen angegeben, wird es als Zeichen für den Dezimalpunkt verwendet, und es werden keine 1000er-Trennzeichen eingefügt. Der Standardwert ist ’.’.

Beispiele

<npsobj … formatter="formatBlobLength"/>

Diese NPSOBJ-Anweisung erzeugt aus dem ermittelten Wert 12345678 die Ausgabe 12 MByte.

Das folgende Beispiel erzeugt aus dem ermittelten Wert 12345678 die Ausgabe 12.056,3 KiByte.

<npsobj … formatter="formatBlobLength" useBinaryPrefix="true" maxSteps="1"
          precision="1" separators=".,"/>

phpVarDef

Aufgabe

Erzeugt eine PHP-Variablendefinition, mit der PHP-Variablen auf Werte gesetzt werden können, die während des Exports berechnet wurden.

Parameter

  • name: Der Name des Feldes, dessen Wert ermittelt werden soll. Dieser Name wird zugleich als Variablenname in der erzeugten PHP-Zuweisung verwendet.

Beispiel

<npsobj insertvalue="var" name="title" formatter="phpVarDef" />

Mit der obigen Anweisung wird die Variablendefinition <?php $title = "Dokumenttitel"; ?> erzeugt.

formatToRFC822

Aufgabe

Formatiert ein Datum nach RFC-822. Dieses Standardformat wird beispielsweise in RSS-Feeds verwendet.

Parameter (ab Version 6.7.1)

  • withSeconds: Ein Wahrheitswert (yes oder no), der bestimmt, ob die Sekunden mit ausgegeben werden. Die Standardeinstellung ist no. Da der Standard ein sekundengenaues Format fordert, werden die Sekunden mit 00 angegeben, wenn dieser Wert no ist.

  • withTwoDigitYear: Ein Wahrheitswert (yes oder no), der bestimmt, ob die Jahreszahl zwei- statt vierstellig ausgegeben werden soll. Die Standardeinstellung ist no.

Beispiele

<npsobj … formatter="formatToRFC822"/>

Diese Anweisung erzeugt ein Datum der Form 15 Apr 2011 14:36:00 GMT.

Die folgende Anweisung erzeugt ein Datum der Form 15 Apr 11 14:36:23 GMT.

<npsobj … formatter="formatToRFC822" withSeconds="yes" withTwoDigitYear="yes"/>

dehtmlize

Aufgabe

Wandelt die HTML-Entitäten &lt;, &gt;, &quot; und &amp; in ihre Textform <, >, " und & um.

Parameter

Dieser Formatter hat keine Parameter.

Beispiel

<npsobj … formatter="dehtmlize"/>

Die obige Anweisung konvertiert den Eingabewert &lt;div&gt;Groß &amp; &quot;klein&quot;&lt;/div&gt; zu <div>Groß & "klein"</div>.