|
|
Zend_Form wird mit verschiedenen Standard Dekoratoren ausgeliefert. Für
weitere Informationen über die generelle Verwendung von Dekoratoren, siehe das
Kapitel über Dekoratore.
Der Callback Dekorator kann einen gewünschten Callback ausführen um Inhalte
darzustellen. Callbacks sollte über die 'callback' Option spezifiziert werden die
dem Dekorator in der Konfiguration übergeben wird, und die jeder gültige PHP Callback
Typ sein kann. Callbacks sollten drei Argumente akzeptieren, $content
(den originalen Inhalt der dem Dekorator übergeben wird), $element (das
Element das dekoriert werden soll), und ein Array von $options. Ein
Beispiel Callback:
class Util
{
public static function label($content, $element, array $options)
{
return '' . $element->getLabel() . "";
}
}
Dieser Callback würd als array('Util', 'label') spezifiziert werden, und
würde einige (falsche) HTML Markups für das Label erzeugen. Der Callback Deorator würde
dann entweder ersetzen, voranstellen, oder dem originalen Inhalt den zurückgegebenen
Wert anhängen.
Der Callback Dekorator erlaubt es einen Null Wert für die placement Option zu spezifizieren, welche den Originalen Inhalt mit dem vom Callback zurückgegebenen Wert ersetzt; 'prepend' und 'append' sind trotzdem genauso gültig.
Der Captcha Dekorator ist für die Verwendung mit dem
Captcha Formularelement. Es verwendet
die render() Methode des Captcha Adapters um die Ausgabe er erzeugen.
Eine variante des Captcha Dekorators, 'Captcha_Word', wird auch üblicherweise verwendet, und erstellt zwei Elemente, eine Id und eine Eingabe. Die Id zeigt den Identifikator der Session gegen den Verglichen wird, und die Eingabe ist für die Benutzerverifikation des Captchas. Beide werden als einzelnes Element geprüft.
Der Description Dekorator kann verwendet werden um eine Beschreibung in einem
Zend_Form, Zend_Form_Element, oder
Zend_Form_DisplayGroup Element anzuzeigen; es holt die Beschreibung
indem es die getDescription() Methode des Objektes verwendet.
Übliche Anwendungsfälle sind das anbieten von UI Hinweisen für Elemente.
Standardmäßig, wenn keine Beschreibung vorhanden ist, wird keine Ausgabe erzeugt.
Wenn die Beschreibung vorhanden ist, wird Sie standardmäßig in ein HTML p
Tag eingebunden, es kann aber ein Tag durch die Übergabe einer tag
Option spezifiziert werden bei der Erstellung des Dekorators, oder durch Aufruf von
setTag(). Zusätzlich kann eine Klasse für das Tag spezifiziert werden
indem die class Option verwendet wird, oder durch den Aufruf von
setClass(); Standardmäßig wird die Klasse 'hint' verwendet.
Die Beschreibung wird escaped indem der Escaping Mechanismus vom View Objekt
standardmäßig verwendet wird. Das kann durch die Übergabe eines false
Wertes an die 'escape' Option des Dekorators ausgeschaltet werden, oder durch die
setEscape() Methode.
Der Standarddekorator verwendet Definitionslisten (<dl>) um Form
Elemente darzustellen. Da Form Elemente in jeder Reihenfolge vorkommen können, werden
Gruppen und Unterformen angezeigt und können mit anderen Form Elementen interagieren.
Um diese speziellen Elementtypen in der Definitionsliste zu behalten, erstellt der
DtDdWrapper einen neuen, leeren Definitionsausdruck (<dt>) und
bettet dessen Inhalt in ein neues Definitionsdatum (<dd>) ein. Die
Ausgabe sieht ähnlich wie folgt aus:
Dieser Dekorator ersetzt den Ihm angebotenen Inhalt durch dessen Einbettung in das
<dd> Element.
Element Fehler erhalten Ihren eigenen Dekorator mit dem Errors Dekorator. Dieser
Dekorator ruft den FormErrors View Helfer auf, welcher Fehlermeldungen in einer
ungeordneten Liste (<ul>) als Listenelement darstellt. Das
<ul> Element empfängt eine Klasse von "errors".
Der Errors Dekorator kann entwedet vorangestellt oder dem Kontext, der Ihm übergeben wurde, angehängt werden.
Anzeigegruppen und Subformen zeigen Ihren Inhalt standardmäßig in einem Fieldset an.
Der Fieldset Dekorator prüft ob entweder eine 'legend' Option oder eine
getLegend() Methode in dem registrierten Element vorhanden ist, und
verwendet dieses als Legende wenn es nicht leer ist. Jeder Inhalt der übergeben wird,
wird in ein HTML Fieldset eingebettet, wobei der originale Inhalt ersetzt wird. Alle
Attribute die in den angezeigten Elementen gesetzt sind werden dem Fieldset als HTML
Attribute übergeben.
File Elemente haben eine spezielle Schreibweise wenn man mehrere File Elemente oder Subformulare
verwendet. Der File Decorator wird von Zend_Form_Element_File verwendet und erlaubt
es mehrere File Elemente mit einem einzelnen Methodenaufruf zu setzen. Er wird automatisch
verwendet und bestimmt den Namen des Elements.
Zend_Form Objekte müssen typischerweise ein HTML Form Tag darstellen. Der
Form Dekorator verweise auf den Form View Helfer. Er betten jeden angebotenen Inhalt in
ein HTML Form Element ein, indem die Aktionen und Methoden des Zend_Form
Objektes verwendet werden, und jedes Attribut als HTML Attribut.
Formen, Anzeigegruppen, und Unterformen sind Sammlungen von Elementen. Um diese
Elemente darzustellen, verwenden Sie den FormElements Dekorator, welche durch alle
Elemente iteriert, render() auf jedem aufruft und diese mit dem
registrierten Trennzeichen verbindet. Es kann an Ihm übergebenen Inhalt entweder
anhängen oder voranstellen.
Einige Entwickler und Designer bevorzugen es alle Fehlermeldungen am Beginn des Formulars zu gruppieren. Der FormErrors Dekorator erlaubt es das zu tun.
Standardmäßig hat die erzeugte Liste von Fehlern das folgende Markup:
ignoreSubForms: Ob die Rekursion im Unterformular ausgeschaltet werden soll
oder nicht. Standardwert: false (erlaubt Rekursion).
markupElementLabelEnd: Markup der der Elementüberschrift angehängt wird.
Standardwert: '</b>'
markupElementLabelStart: Markup der der Elementüberschrift vorangestellt wird.
Standardwert: '<b>'
markupListEnd: Markup der der Nachrichtenliste angehängt wird. Standardwert:
'</ul>'.
markupListItemEnd: Markup der individuellen Fehlermeldungen angehängt wird.
Standardwert: '</li>'
markupListItemStart: Markup der individuellen Fehlermeldungen vorangestellt wird.
Standardwert: '<li>'
markupListStart: Markup der der Nachrichtenliste vorangestellt wird. Standardwert:
'<ul class="form-errors">'
Der FormErrors Dekorator kann entweder angehängt oder dem Inhalt dem er angehört vorangestellt werden.
Der HtmlTag Dekorator erlaubt es HTML Tags anzupassen um Inhalt zu dekorieren; das angepasste Tag wird in der 'tag' Option übergeben, und jede andere Option wird als HTML Attribut für dieses Tag verwendet. Das Tag nimmt standardmäßig an das es Blocklevel ist, und ersetzt den Inhalt durch dessen Einbettung in das gegebene Tag. Trotzdem kann eine Platzierung spezifiziert werden um das Tag genauso anzuhängen oder voranzustellen.
Der Image Dekorator erlaubt es eine HTML Bildeingabe
(<input type="image" ... />) zu erstellen, und es optional in einem
anderen HTML Tag darzustellen.
Standardmäßig verwendet der Dekorator die src Eigenschaft des Elements als Bildquelle,
welche mit der setImage() Methode als Bildquelle gesetzt werden.
Zusätzlich wird das Lebel des Elements als alt Tag verwendet, und
imageValue (welches mit den setImageValue() und
getImageValue() Zugriffsmethoden des Bildes manipuliert werden kann)
wird für den Wert verwendet.
Um ein HTML Tag zu spezifizieren das das Element einbetten soll, kann entweder die
'tag' Option an den Dekorator übergeben werden, oder explizit setTag()
aufgerufen werden.
Form Elemente haben tyischerweise ein Label und der Label Dekorator wird verwendet um
diese Labels darzustellen. Er ruft den FormLabel View Helfer auf, und holt das Label
des Elements inden die getLabel() Methode des Elements verwendet wird.
Wenn kein Label vorhanden ist, wird es auch nicht darstellt. Standardmäßig werden
Label übersetzt wenn ein Übersetzungsadapter existiert und eine Übersetzung für das
Label existiert.
Optional kann die 'tag' Option spezifiziert werden; wenn vorhanden, bettet Sie das
Label in das Block-Level Tag ein. Wenn die 'tag' Option vorhanden, und kein Label
vorhanden ist wird das Tag ohne Inhalt dargestellt. Es kann definiert werden das die
Klasse das Tag mit der 'class' Option verwendet oder durch Aufruf von
setClass().
Zusätzlich können Präfixe und Suffixe für die Verwendung spezifiziert werden wenn die Elemente angezeigt werden, basierend darauf ob das Label für ein optionales oder benötigtes Element ist. Übliche Verwendungszwecke würden sein, ein ':' dem Label anzufügen, oder ein '*' um anzuzeigen das das Element benötigt wird. Das kann mit den folgenden Optionen und Methoden gemacht werden:
optionalPrefix: Setzt den Text der dem Label vorangestellt wird
wenn das Element optional ist. Kann mit den Zugriffsmethoden
setOptionalPrefix() und getOptionalPrefix()
manipuliert werden.
optionalSuffix: Setzt den Text der dem Label angehängt wird
wenn das Element optional ist. Kann mit den Zugriffsmethoden
setOptionalSuffix() und getOptionalSuffix()
manipuliert werden.
requiredPrefix: Setzt den Text der dem Label vorangestellt wird
wenn das Element benötigt wird. Kann mit den Zugriffsmethoden
setRequiredPrefix() und getRequiredPrefix()
manipuliert werden.
requiredSuffix: Setzt den Text der dem Label angehängt wird
wenn das Element benötigt wird. Kann mit den Zugriffsmethoden
setRequiredSuffix() und getRequiredSuffix()
manipuliert werden.
Standardmäßig stellt der Label Dekorator dem angegebenen Inhalt voran; es kann die 'placement' Option mit 'append' spezifiziert werden um es nach dem Inhalt zu platzieren.
Formulare, Anzeigegruppen, und Unterformulare sind Kollektionen von Elementen. Wenn der ViewScript Dekorator verwendet wird, ist es nützlich die Möglichkeit zu haben das View Objekt, die Übersetzung, und alle komplett qualifizierten Namen (wie Sie von der Array Schreibweise der Unterformulare erkannt werden), rekursiv setzen zu können. Der 'PrepareElements' Dekorator kann das für dich erledigen. Typischerweise wird man Ihn als ersten Dekorator in der Liste setzen.
$form->setDecorators(array(
'PrepareElements',
array('ViewScript', array('viewScript' => 'form.phtml')),
));
Die meisten Element verwenden Zend_View Helfer für die Darstellung und
das wird mit dem ViewHelper Dekorator getan. Mit Ihm kann ein 'helper' Tag spezifiziert
werden der explizit den View Helfer setzt der anzupassen ist; wenn keiner angegeben
wird, verwendet er das letzt Segment des Klassennamens des Elements um den Helfer
zu ermitteln, und stellt den String 'form' voran: z.B. 'Zend_Form_Element_Text' würde
nach einem View Helfer 'formText' schauen.
Alle Attribute des angegebenen Elements werden dem View Helfer als Attribute des Elements übergeben.
Standardmäßig fügt dieser Dekorator Inhalt hinten an; es kann die 'placement' Option verwendet werden um eine alternative Platzierung zu spezifizieren.
Manchmal ist es gewünscht ein View Skript für die Erstellung eigener Elemente zu verwenden; auf diesem Weg hat man eine sehr detailierte Kontrolle über die Elemente, und wandelt das View Skript zu einem Designer um, oder erstellt einfach einen Weg um Einstellungen zu überladen die auf Modulen basieren (jedes Modul könnte optional die View Skripte des Elements überladen um seinen eigenen Zwecken zu entsprechen). Der ViewScript Dekorator löst dieses Problem.
Der ViewScript Dekorator benötigt eine 'viewScript' Option, entweder angeboten vom Dekorator, oder als Attribut des Elements. Er stellt dann das View Skript als teilweises Skript, was bedeutet das jeder Aufruf von Ihm seinen eigenen Geltungsbereich der Variablen hat; keine Variablen von der View werden im Element enthalten sein ausser denen des Elements selbst. Verschiedene Variablen werden dann bekannt gegeben:
element: Das Element das dekoriert wird
content: Der Inhalt der an den Dekorator übergeben wird
decorator: Das Dekorator Objekt selbst
Zusätzlich werden, alle Optionen die an den Dekorator mit
setOptions() übergeben und nicht intern verwendet werden, an das
View Skript als View Variablen übergeben.
Als Beispiel, kann das folgende Element hergenommen werden:
// Setzt den Dekorator für das Element zu einem einzelnen, ViewScript,
// Dekorator spezifiziert das viewScript als Option, und einige extra
// Optionen:
$element->setDecorators(array(array('ViewScript', array(
'viewScript' => '_element.phtml',
'class' => 'form element'
))));
// ODER das viewScript als Attribut des Elements spezifizieren:
$element->viewScript = '_element.phtml';
$element->setDecorators(array(array('ViewScript',
array('class' => 'form element'))));
Dann könne ein View Skript die das folgende existieren:
= $this->formLabel($this->element->getName(), $this->element->getLabel()) ?> = $this->{$this->element->helper}( $this->element->getName(), $this->element->getValue(), $this->element->getAttribs() ) ?> = $this->formErrors($this->element->getMessages()) ?>= $this->element->getDescription() ?>
Note: Inhalte mit einem View Skript ersetzen
Es kann für das View Skript nützlich sein den Inhalt der dem Dekorator angeboten wird zu ersetzen -- zum Beispiel wenn man Ihn wrappen will. Das kann man erreichen indem ein boolscher false Wert für die 'placement' Option des Dekorators spezifiziert wird:
// Bei Erstellung des Dekorators: $element->addDecorator('ViewScript', array('placement' => false)); // Zu einer existierenden Dekorator Instanz hinzufügen: $decorator->setOption('placement', false); // Zu einem Dekorator hinzufügen der bereits bei einem Element hinzugefügt ist: $element->getDecorator('ViewScript')->setOption('placement', false); // In einem View Skript das von einem Dekorator verwendet wird: $this->decorator->setOption('placement', false);
Die Verwendung des ViewScript Dekorators wird empfohlen wenn man eine sehr feinkörnige Kontrolle darüber benötigt wie Elemente dargestellt werden.
|
|
Copyright © 2005-2011 Zend Technologies Inc (compiled by mikaelkael with ZFDocumentor - SVN 12872).

