Das Element npsField
stellt Funktionalität bereit, um Eingabefelder in Formularen zu erzeugen. Es bietet bequeme feldspezifische Fehlerbehandlung und obligatorische Felder (für unbedingt vom Benutzer zu machende Angaben). Der für die Darstellung erforderliche HTML-Code wird durch das GUI generiert, wodurch das Design einheitlich ist.
<npsField type="Typ" name="Name" label="Beschriftung" required="Pflicht" error="Fehler" width="Breite" …>…</npsField>
Dies erzeugt ein Formularfeld.
type
ist der Typ des Formularfeldes und darf file
, text
, select
, textarea
, date
oder selectObject
sein.name
ist der Name des erzeugten Parameters.label
ist der Text, mit dem das Feld beschriftet werden soll.required
darf true
oder false
(Voreinstellung) sein. Wenn der Wert true
ist, führt es zu einem Fehler, wenn der Benutzer den betreffenden Wert nicht angibt. Die Fehlermeldung wird neben dem Feld angezeigt. Bei Auswahlfeldern wird die Option keine
nicht eingeblendet, wenn required
auf true
steht.error
kann vom Programmierer des Assistenten auf eine passende Fehlermeldung gesetzt werden, die angezeigt wird, wenn der Assistent im Wert des Feldes einen Fehler gefunden hat. Diese Meldung wird dann ebenfalls neben dem Feld im passenden Design angezeigt.width
gibt die Breite des Feldes in ex
an (ex
ist die Standard-Einheit der verwendeten Styles). Dieser Wert wird bei Bedarf zur korrekten Darstellung intern angepasst. Der Firefox-Browser interpretiert diese Angabe derzeit nicht richtig, was zu Darstellungsfehlern führen kann.Abhängig vom Feldtyp können im npsField
-Tag weitere Parameter als Tag-Attribute angegeben werden.
file
)<npsField type="file" name="Name" fileName="Pfad zu der Datei" ticketId="Streaming-Ticket-ID" mimeType="Mime-Typ" … />
Dies erzeugt ein Dateiauswahlfeld.
fileName
Ist der Name der zu importierenden Datei.ticketId
ID des Streaming-Tickets, das zum Hochladen der Datei auf den CMS-Server angelegt wurde. Über das Streaming-Interface kann dann mit Tcl auf den Inhalt der Datei zugegriffen werden.mimeType
schränkt die zur Auswahl stehenden Dateien ein. Details zu Mime-Typen sind in der HTML-Spezifikation zu finden.Hierzu gibt es ein Anwendungsbeispiel.
text
)<npsField type="text" name="Name" value="Einige Angaben" maxLength="Maximale Länge" …/>
Dies erzeugt ein Texteingabefeld.
maxLength
gibt die Anzahl der Zeichen an, die maximal eingegeben werden können.select
)<npsField type="select" name="Name" selectionType="single" renderMode="Darstellung" …> … </npsField>
Dies erzeugt ein oder mehrere Felder zur Auswahl einer Option.
renderMode
gibt an, wie das Feld gerendert werden soll:
vertical
: Es werden Radiobuttons gerendert.list
(Voreinstellung): Es wird ein Aufklapp-Menü gerendert.width
wird nur ausgewertet, wenn renderMode
den Wert list
hat.
npsFieldOption
-Elementen angegeben.
select
)<npsField type="select" name="Name" selectionType="multi" renderMode="Darstellung" size="Höhe" …> … </npsField>
Dies erzeugt ein oder mehrere Felder zur Auswahl einer Option.
renderMode
gibt an, wie das Feld gerendert werden soll:
vertical
: Es werden Checkboxen untereinander gerendert.list
(Voreinstellung): Es wird ein Mehrfach-Auswahlfeld gerendert.width
wird nur ausgewertet, wenn renderMode
den Wert list
hat.
size
wird nur ausgewertet, wenn renderMode
auf den Wert list
gesetzt ist, und gibt die Höhe des Feldes in Zeilen an.
npsFieldOption
-Elementen angegeben.
textarea
)<npsField type="textarea" name="Name" rows="Höhe" cols="Breite" style="Style-Angaben"… />
Dies erzeugt einen Texteingabebereich.
rows
gibt die Anzahl der Zeilen des Texteingabebereichs an.cols
gibt die Breite (Anzahl von Zeichen) des Texteingabebereichs an.style
ermöglicht es, zusätzliche CSS-Style-Angaben zu machen.selectObject
)<npsField type="selectObject" name="Name" value="Datei-ID" startId="Start-Datei-ID" startPath="Start-Datei-Pfad" objectTypes="Dateitypen" selectMessage="Meldung"… />
Dies erzeugt ein Dateiauswahlfeld mit einem Eingabefeld und einem Auswahl-Button. Klickt man auf den Button, öffnet sich die Auswahlseite. Wählt man dort eine Datei aus, wird ihr Pfad in das Eingabefeld übernommen.
startId
und startPath
geben optional die im Auswahldialog initial selektierte Datei an. Nur eines dieser beiden Attribute darf angegeben werden.value
enthält optional die ID einer Datei. Der Pfad dieser Datei wird in das Eingabefeld als Vorgabe eingetragen. Dieser Pfad überlagert die Vorgabe von startId
bzw. startPath
.objectTypes
schränken die im Auswahldialog erscheinenden Dateien in Bezug auf ihren Typ ein. Der Wert dieses Attributs ist eine kommaseparierte Liste. Ordner sind immer sichtbar.selectMessage
wird angezeigt, um den Benutzer über den Zweck der Dateiauswahl zu informieren.date
)<npsField type="date" name="Name" value="Datum" format="Datumsformat"… />
Dies erzeugt ein Datumsauswahlfeld mit einem Eingabefeld und einem Auswahl-Button. Klickt man auf den Button, öffnet sich die Auswahlseite. Wählt man dort ein Datum aus, wird es in das Eingabefeld übernommen.
value
ist der Wert des Datumsauswahlfeldes als 14-stelliges CMS-Datum. Der Feldwert, der an den Assistenten übergeben wird, ist ebenfalls ein 14-stelliges CMS-Datum.format
ist das optionale Format, mit dem der Feldwert formatiert werden soll. Die möglichen Platzhalter-Werte sind bei dem Systemkonfigurationselement validDateTimeOutputFormats
beschrieben. Ist dieser Wert nicht angegeben, wird das Datumsformat des jeweiligen Benutzers verwendet.Eingabeelemente, d.h. die entsprechenden npsField
-Elemente, können in Assistenten komfortabel erzeugt werden, indem Prozeduren aus der Tcl-Bibliothek share/script/cm/serverCmds/wizards/lib/layout.tcl
aufgerufen werden. Zusätzliche Parameter werden durchgängig als HTML-Attribute an die erzeugten npsField
-Tags übergeben. Dadurch haben Sie die Möglichkeit, CSS-Klassen zu setzen oder zusätzliche HTML-Attribute und Parameter anzugeben.
::layout::textField name label value …
Erzeugt ein npsField
-Element vom Typ text
.
name
, label
und value
setzen die entsprechenden npsField
-Element-Attribute. HTML-spezifische Zeichen werden dabei konvertiert.npsField
-Element-Attribute als Liste von Name-Wert-Paaren übergeben werden, etwa maxLength
.Beispiel:
::layout::textField bezeichnung "Produktbezeichnung" [getParam bezeichnung]\ width 40 maxLength 40
::layout::textArea name label value …
Erzeugt ein npsField
-Element vom Typ textarea
.
name
, label
und value
setzen die entsprechenden npsField
-Element-Attribute. HTML-spezifische Zeichen werden dabei konvertiert.npsField
-Element-Attribute als Liste von Name-Wert-Paaren übergeben werden.::layout::mceEditor name label value …
Erzeugt ein mehrzeiliges Textfeld, das zur Laufzeit durch den TinyMCE ersetzt wird. Die Parameter entsprechen denen des mehrzeiligen Textfelds.
Ab CMS Fiona 6.8.0 kann der Editor mit dem optionalen Argument config
konfiguriert werden. Als Wert des Arguments wird die JSON-Repräsentation der TinyMCE-Konfiguration erwartet:
::layout::mceEditor … config {{theme_advanced_buttons1: "bold", …}}
Der TinyMCE setzt die Web-Applikation tinyMCE
voraus. Sie können diese mit der folgenden Anweisung deployen:
Instanzverzeichnis/bin/rc.npsd deploy tinyMCE
Ab CMS Fiona 6.8.0 ist die tinyMCE
-Web-Applikation in der Liste der voreingestellt zu deployenden Web-Applikationen (rc.npsd.conf
) enthalten, wird also durch rc.npsd deploy
deployt.
Um die Pfade von Links im bearbeiteten Feldinhalt richtig anzuzeigen, müssen diese vor dem Aufruf des Editors angepasst werden:
set tinyMceTextArea [changeImgPathsToPreviewPaths $blob $objId]
tinyMceTextArea
ist hierbei der Name der Variablen, in der der angepasste Feldwert zwischenzeitlich gespeichert wird. blob
ist der Feldinhalt, objId
die ID der betreffenden CMS-Datei. Nach der Bearbeitung müssen die Pfade wieder normalisiert werden:
set blob [changePreviewPathsToImgPaths $tinyMceTextArea]
::layout::chooseMulti limit name valuesAndLabels selectedValues ?label? …
Erzeugt abhängig von der Größe von valuesAndLabels
entweder mehrere Auswahlkästchen oder
eine Mehrfachauswahlliste.
Auswahlkästchen werden verwendet, wenn die Anzahl der Werte kleiner als
limit
ist.
::layout::chooseSingle limit name valuesAndLabels selectedValue ?label? …
Erzeugt abhängig von der Größe von valuesAndLabels
entweder mehrere Auswahlschalter oder
ein Popup-Menü. Auswahlschalter werden
verwendet, wenn die Anzahl der Werte kleiner als limit
ist.
::layout::radioButtons name valuesAndLabels selectedValue ?label? …
Erzeugt ein npsField
-Element mit npsFieldOption
-Elementen. Die Auswahl wird mit Auswahlschaltern dargestellt.
name
spezifiziert den HTML-Formular-Parameternamen.label
(optional) ist die Bezeichnung der Auswahl.valuesAndLabels
ist eine Liste der Auswahlmöglichkeiten. Eine Auswahlmöglichkeit ist eine Liste aus einem Wert und einer optionalen Bezeichnung.selectedValue
ist der aktuell ausgewählte Wert.npsField
-Element-Attribute als Liste von Name-Wert-Paaren übergeben werden, zum Beispiel required
.Beispiel:
::layout::radioButtons color {{yellow gelb} {red rot} {blue blau}}\ [getParam "color"] "Lackfarbe" required true
::layout::checkBoxes name valuesAndLabels selectedValues ?label? …
Erzeugt ein npsField
-Element mit npsFieldOption
-Elementen. Die Auswahl wird als voneinander unabhängig aktivierbare Auswahlkästchen dargestellt.
::layout::radioButtons
.
selectedValues
enthält im Unterschied zur Prozedur radioButtons
die Liste der ausgewählten Optionen.::layout::checkBox name valueAndLabel selectedValue label …
Erzeugt ein einzelnes Auswahlkästchen.
::layout::radioButtons
.
selectedValue
enthält im Unterschied zur Prozedur radioButtons
die Liste der ausgewählten Optionen.::layout::dropdown name valuesAndLabels selectedValue ?label? …
Erzeugt ein npsField
-Element mit npsFieldOption
-Elementen. Die Auswahl wird als Popup-Menü dargestellt.
::layout::radioButtons
.
::layout::select name valuesAndLabels selectedValues ?label? …
Erzeugt ein npsField
-Element mit npsFieldOption
-Elementen. Die Auswahl wird als Mehrfachauswahlliste dargestellt.
::layout::checkButtons
.
::layout::fileField name label fileName ticketId …
Erzeugt ein npsField
-Element vom Typ file
mit dem Namen name
und der Bezeichnung label
.
fileName
ist der Name einer bereits hochgeladenen Datei. Wurde keine Datei hochgeladen, sollte dieser Wert ein leerer String sein.ticketId
ist die Streaming-Ticket-ID, mit der auf den Inhalt der hochgeladenen Datei zugegriffen werden kann. Ist diese ID noch nicht bekannt, sollte als Wert dieses Parameters ein leerer String übergeben werden.npsField
-Element-Attribute als Liste von Name-Wert-Paaren übergeben werden, zum Beispiel required
.Beispiel:
::layout::fileField importFile "" \ [getParam importFile.fileName] [getParam importFile.ticketId]\ required true error $fieldError]]
Hierzu gibt es ein Anwendungsbeispiel.
::layout::selectObject name label id selectMessage …
Erzeugt ein npsField
-Element vom Typ selectObject
mit dem Namen name
, der Bezeichnung label
, der Datei-ID id
und der Meldung selectMessage
.
::layout::dateField name label value …
Erzeugt ein npsField
-Element vom Typ date
mit dem Namen name
, der Bezeichnung label
und dem Wert value
.
Gibt man in einem Assistenten den folgenden Code an das GUI zurück, so wird auf der entsprechenden Assistenten-Seite ein HTML-Eingabefeld erzeugt, das zum Upload einer Datei auf den Server dient:
<npsField type="file" name="varName" fielName="" ticketId="" ></npsField>
Für die Datei, die der Benutzer hochlädt, wird im Content Management Server ein Streaming-Ticket erzeugt, unter dem man auf die Datei zugreifen kann. Die ID dieses Tickets sowie den Namen der Datei legt der Content Management Server in den beiden Variablen
$varName.fileName $varName.ticketId
ab, wobei varName
der Wert des Tag-Attributs name
im npsField
-Element ist. Innerhalb des Wizards könnte man auf die Werte beispielsweise folgendermaßen zugreifen:
proc wizard {params objId} { set uploadFileName [getParam meinUpload.fileName] set uploadTicket [getParam meinUpload.ticketId] … }
Um die hochgeladene Datei dann als CMS-Datei abzulegen, kann man sich in dem entsprechenden Tcl-Befehl auf das Ticket beziehen, damit der Content Management Server den Hauptinhalt der neuen CMS-Datei mit dem Inhalt der hochgeladenen Datei belegt. Vorher werden jedoch aus dem Namen der hochgeladenen Datei der Name der anzulegenden CMS-Datei und deren Dateiendung (sofern nicht aus anderer Quelle gewonnen oder vorgegeben) gebildet:
# Name und Dateiendung ermitteln set name [file rootname $uploadFileName] set contentType [string trimleft [file extension $uploadFileName] "."] # Neue Datei mit dem Inhalt der hochgeladenen Datei anlegen obj withId $parent createAndLoad name $name objClass generic \ contentType $contentType blob.stream $uploadTicket
Im obigen Beispiel wird eine neue Datei von der Vorlage Ressource unterhalb des Ordners mit der ID $parent
angelegt, zu deren Hauptinhalt der hochgeladene, über das Streaming-Ticket $uploadTicket
erreichbare Dateiinhalt wird.
Um die hochgeladene Datei nicht im CMS, sondern im Dateisystem des Servers abzuspeichern, kann man sie über das Ticket mit Hilfe des Tcl- Befehls stream downloadFile
auch herunterladen:
set tmpFile "/tmp/uploads/$uploadFileName" stream downloadFile $uploadTicket $tmpFile
Anschließend liegt die Datei im Verzeichnis /tmp/uploads/
.