Vollständige Version anzeigen : Zend_Form Elemente und Decorators
Hallo zusammen,
ich bin gerade dabei mich ein wenig mit Zend_Form auseinanderzusetzen und stolpere gerade ein wenig bei den Decorators.
Die Ausgabe soll wie folgt sein:
<p class="input">
<label for="name">Label</label>
<span class="box"><input type="text" name="name" id="name" /></span>
</p>Formklasse sieht folgendermassen aus:
<?php
class Form_My_Form extends Zend_Form {
function init() {
$text= new Zend_Form_Element_Text('text');
$text->setLabel('Benutzername')
->addFilter('StringToLower')
->setRequired(true)
->addValidator('NotEmpty', true);
$this->addElement($text);
$this->clearDecorators();
$this->addDecorator('FormElements')
->addDecorator('Form');
$this->setElementDecorators(array(
array('ViewHelper'),
array('Errors'),
array('Description'),
array('Label', array('separator' => ' ')),
array('HtmlTag', array('tag' => 'p', 'class'=>'input')),
));
$text->addDecorator('HtmlTag', array('tag' => 'span', 'class' => 'box'));
}
}
?>Wie man vlt. sehen kann, habe ich mich ein wenig von Akras Zend_Form Tutorial inspirieren lassen.
Mein Problem ist nun, dass er das Spantag auch um das Label legt, ich es aber gerne nur um das Inputfeld haette.
Wer eine Idee oder einen Denkanstoss :)
Gruesse,
Kris
hoagster
01.04.2008, 16:39
Ich glaube
array('Label', array('tag' => '', 'separator' => ' ')),müsste das Problem beheben.
Das produziert leere <> und dadurch waere das Inputfeld auch nicht von den spans umgeben :/
hoagster
01.04.2008, 16:51
Eventuell so:
$text->setDecorator(array(
array('ViewHelper'),
array('HtmlTag', array('tag' => 'span', 'class' => 'box')),
array('Label', array('tag' => ''))
));
Wir kommen dem Ergebnis zumindest schon naeher ;)
<><label for="username" class="required">Benutzername</label></>
<span class="box"><input type="text" name="username" id="username" value="" /></span>
Args, einfach das array('tag' => '') weglassen :)
Schade nur, dass ich das nun fuer jedes Element einzeln setzen muss, aber besser als gar nicht.
Danke schon einmal.
Naja, doch ein bisschen zu frueh gefreut. Jetzt fehlt naemlich wieder das p-Tag, das sich um die ganze Schose drumlegt :/
hoagster
01.04.2008, 17:15
Liegt es eventuell daran, das ich "setDecorator" anstatt "addDecorator" benutzte.
Vielleicht ist das ja der Knackpunkt.
Klappt beides nicht, weil er mir dann den HTML-Tag aus dem setElementDecorators ueberschreibt.
Gibt es denn noch eine andere Moeglichkeit Element zu "dekorieren"?
Hi Kris,
warum willst du denn das input-Tag noch extra in ein span-tag packen?
Das sollte man eigentlich nicht machen, heißt es ist nicht erlaubt und spuckt beim w3c-Validator auch nen Fehler aus.
Viel sinnvoller wäre doch dass input-feld direkt zu bearbeiten, oder wenns nicht anders geht ein div drumrumpacken damit es wenigstens der validator schluckt.
Gruß
Spea
Das sollte man eigentlich nicht machen, heißt es ist nicht erlaubt und spuckt beim w3c-Validator auch nen Fehler aus.
Wie kommst du auf das Pferd?
Wie kommst du auf das Pferd?
Ich hab nicht so wirklich Ahnung auf was du hinaus willst :)
Ich hab nicht so wirklich Ahnung auf was du hinaus willst
Meine Frage zielte auf diese Aussage ab:
warum willst du denn das input-Tag noch extra in ein span-tag packen?
Das sollte man eigentlich nicht machen, heißt es ist nicht erlaubt und spuckt beim w3c-Validator auch nen Fehler aus.
Warum sollte man ein "input"-Element nicht in ein "span"-Element setzen dürfen?!
Warum sollte man ein "input"-Element nicht in ein "span"-Element setzen dürfen?!
Weil es ein inline-Element ist, und diese sollten wenn möglich keine weiteren Tags enthalten.
Weil es ein inline-Element ist, und diese sollten wenn möglich keine weiteren Tags enthalten.
Klar kann ein Inline-Element noch weitere Inline-Elemente beinhalten.
Ansonsten könntest du nie ein "span"-Element innerhalb eines Hyperlink setzen oder ein "abbr"-Element innerhalb eines "strong"-Elementes wäre ebenfalls nicht möglich. Das geht noch ewig weiter...!
Siehe auch:
"Allgemeines Inline-Element" - http://de.selfhtml.org/html/text/bereiche.htm#inline
"Modularisierung von XHTML - Textmodul" - http://edition-w3c.de/TR/2001/REC-xhtml-modularization-20010410/#s_textmodule
Klar kann ein Inline-Element noch weitere Inline-Elemente beinhalten.
Ansonsten könntest du nie ein "span"-Element innerhalb eines Hyperlink setzen oder ein "abbr"-Element innerhalb eines "strong"-Elementes wäre ebenfalls nicht möglich. Das geht noch ewig weiter...!
Siehe auch:
"Allgemeines Inline-Element" - http://de.selfhtml.org/html/text/bereiche.htm#inline
"Modularisierung von XHTML - Textmodul" - http://edition-w3c.de/TR/2001/REC-xhtml-modularization-20010410/#s_textmodule
Ok, dann hab ich mich wohl geirrt :)
Ich bin "nur" der Programmierer, unser XHTML-Spezi muss sich dabei irgendwas gedacht haben, ich denk mal das haengt damit zusammen, dass das Inputfeld rot umrandet werden soll, wenn ein Fehler auftritt :)
Hab nun auch eine Moeglichkeit gefunden das Problem zu loesen und zwar mit dem ViewScript Decorator. Hatte das wohl in der Dokumentation uebersehen, funktioniert aber tadellos.
Danke nochmal fuer die Hilfe :)
ich denk mal das haengt damit zusammen, dass das Inputfeld rot umrandet werden soll, wenn ein Fehler auftritt
"input"-Elemente kennen die "border"-Eigenschaft, also wird auch hier kein "span" benötigt.
Hab nun auch eine Moeglichkeit gefunden das Problem zu loesen und zwar mit dem ViewScript Decorator.
Hier der entsprechende Link dazu: http://framework.zend.com/manual/de/zend.form.standardDecorators.html#zend.form.standa rdDecorators.viewScript
"input"-Elemente kennen die "border"-Eigenschaft, also wird auch hier kein "span" benötigt.
Ja, schon klar. Das Erscheinungsbild des Inputs sollte aber nicht veraendert werden, deswegen das zusaetzliche span
KingCrunch
03.04.2008, 21:10
Ja, schon klar. Das Erscheinungsbild des Inputs sollte aber nicht veraendert werden, deswegen das zusaetzliche span
Bin irritiert: Es sollte nicht verändert, aber rot umrandet werden? Was denn nun? Und ist es nicht ein rein technischer Unterschied, ob nun das Input-Feld umrandet wird, oder ein "Feld" umrandet wird, was das Input-Feld umrandet?
http://dasblogt.de/stuff/kris/input.jpg
Das ist gemeint. Wie gesagt, war nicht meine Idee ...
KingCrunch
07.04.2008, 18:10
AH, verstehe, is ja wirklich ein Unterschied Oo Ich find allerdings Unteres hübscher :D Naja, wir sind hier kein Kunstkurs ;)
Das Element wird standardmässig mit einem dd-Tag umschlossen. mal abgesehen davon, dass es sehr einfach ist das durch ein span zu ersetzen, müsste es reichen, wenn du eben entsprechende Style-Attribute dem Ding hinzufügst. Wie das allerdings geht, hab ich keine Ahnung :D
Wir vorher schon gesagt, mache ich das nun mit dem ViewScript (http://framework.zend.com/manual/de/zend.form.standardDecorators.html#zend.form.standa rdDecorators.viewScript) Decorator, trotzdem danke :D
segnior_rossi
18.09.2008, 22:45
http://dasblogt.de/stuff/kris/input.jpg
Das ist gemeint. Wie gesagt, war nicht meine Idee ...
Hi Kris,
kannst du kurz den HTML+CSS Code für die Darstellung des oberen Feldes posten? Merci
vBulletin® v3.6.12, Copyright ©2000-2010, Jelsoft Enterprises Ltd.