Oliver Kühne
New member
Hallo,
ich hoffe der Titel ist nicht verwirrend, aber ich wusste nicht wie ich mein Problem besser in einer Überschrift umschreiben soll.
Folgendes Szenario:
Ich habe eine Zend_Form wo ich ein ViewScript setze sowie einzelne Elemente die widerum ein eigenes ViewScript nutzen:
My_Form_Element_Login_Text:
_forms/login.phtml:
Soweit funktioniert das alles wirklich wunderbar, das HTML wird so angezeigt wie ich das will. Aber sobald ich eine DisplayGroup hinzufüge (in My_Form_Login) und diesem ein ViewScript zuweise, wird dieses nicht korrekt angezeigt:
_forms/element/login/group-form-actions.phtml:
Die Elemente ($checkbox und $button) werden korrekt mit ViewScript übergeben aber das HTML ("<div class="form-actions">..</div>") was die DisplayGroup umschließen soll nicht. Entferne ich nun in der Zend_Form das ViewScript, dann habe ich die gewünschte anzeige der DisplayGroup. Soll heißen, dass eine geht hier scheinbar nicht zusammen mit dem anderen und ich teste und suche schon eine ganze Zeit wie ich dieses Problem umgehen kann, nur leider finde ich keine Hilfe.
Noch mal Zusammengefasst:
Zend_Form + ViewScript = (ok) und DisplayGroup + ViewScript (nur Elemente kein HTML Container)
Zend_Form ohne ViewScript und DisplayGroup + ViewScript (HTML Elemente werden korrekt für die DisplayGroup angezeigt)
Ich hoffe ich konnte einigermaßen verständlich mein Problem schildern und vielleicht hat ja hier jemand einen Vorschlag der mein Problem löst.
Vielen Dank
Oliver
ich hoffe der Titel ist nicht verwirrend, aber ich wusste nicht wie ich mein Problem besser in einer Überschrift umschreiben soll.
Folgendes Szenario:
Ich habe eine Zend_Form wo ich ein ViewScript setze sowie einzelne Elemente die widerum ein eigenes ViewScript nutzen:
PHP:
class My_Form_Login extends Zend_Form {
public function init() {
$this->setDecorators(
array(
array(
'ViewScript',
array(
'viewScript' => '_forms/login.phtml',
)
)
)
);
$user = new My_Form_Element_Login_Text('username');
$user->setLabel("Benutzername");
}
}
PHP:
class My_Form_Element_Login_Text extends Zend_Form_Element_Text {
public function __construct($options = null) {
parent::__construct($options);
}
public function loadDefaultDecorators() {
$this->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => '_forms/element/login/text.phtml',
)
)
));
}
}
HTML:
<form action="<?php echo $this->element->getAction(); ?>" method="<?php echo $this->element->getMethod(); ?>">
<h3 class="form-title">Login in dein Account</h3>
<?php
foreach ($this->element->getElements() as $element) {
echo $element;
}
?>
</form>
PHP:
class My_Form_Login extends Zend_Form {
public function __construct($options = null) {
parent::__construct($options);
}
public function init() {
$this->setMethod('post');
$this->setAction("");
$this->setDecorators(
array(
array(
'ViewScript',
array(
'viewScript' => '_forms/login.phtml',
)
)
)
);
$user = new My_Form_Element_Login_Text('username');
$user->setLabel("Benutzername");
$pass = new My_Form_Element_Login_Password('password');
$pass->setLabel('Passwort');
$checkbox = new My_Form_Element_Login_Checkbox('remember');
$checkbox->setLabel('Remember me');
$button = new My_Form_Element_Login_Button('login');
$button->setLabel('Login');
$this->addElements(array($user, $pass));
$this->addDisplayGroup(array($checkbox, $button), 'formactions');
$group = $this->getDisplayGroup('formactions');
$group->setDecorators(
array(
array(
'ViewScript',
array(
'viewScript' => '_forms/element/login/group-form-actions.phtml',
)
)
)
);
}
}
HTML:
<div class="form-actions">
<?php
$elements = $this->element->getElements();
foreach ($elements as $element) {
echo $element;
}
?>
</div>
Noch mal Zusammengefasst:
Zend_Form + ViewScript = (ok) und DisplayGroup + ViewScript (nur Elemente kein HTML Container)
Zend_Form ohne ViewScript und DisplayGroup + ViewScript (HTML Elemente werden korrekt für die DisplayGroup angezeigt)
Ich hoffe ich konnte einigermaßen verständlich mein Problem schildern und vielleicht hat ja hier jemand einen Vorschlag der mein Problem löst.
Vielen Dank
Oliver