Am 29.09.2011, 21:49 Uhr, schrieb Christof Coetzee
<[email protected]>:
I personally would have designed the ZF decorators to be very lightweight
and use some kind of pattern, maybe something like this:
$form->setViewPatternDefault('<div>{label}</div><div>{field}<br
/>{description}</div>);
//or
$form->setViewPatternDefault('/path/to/form/views/rigid.phtml');
//and then if a specific field needed a different pattern
$form->getElement('dateCombo')
->setViewPattern('<div>{label}<br />{field}</div>');
One can currently emulate this with Decorator View Scripts, although
still a
bit heavy, but gives you the most flexibility over form views.
Use the "Callback" decorator: (Example for PHP 5.3)
// View
$view = new Zend_View();
$view->setEncoding('utf-8');
$view->doctype('XHTML1_STRICT');
// Form
$form = new Zend_Form();
$form->setDecorators(array(
'FormElements',
'Form',
));
// Element
$form->addElement(
'text',
'foo',
array(
'label' => 'Foo',
'description' => 'Foobar...',
'decorators' => array(
array(
// Decorator name
'Callback',
// Decorator options
array(
'callback' => function($content, $element, array
$options)
{
// Add and setup view helper decorator
$element->addDecorator('ViewHelper');
$viewHelper = $element->getDecorator('ViewHelper');
$viewHelper->setElement($element);
// Label
$html = '<div><label for="' . $element->getId()
. '">'
. $element->getLabel()
. '</label></div>';
// Element
$html .= '<div>' . $viewHelper->render('') . '<br
/>';
// Description
$html .= $element->getDescription() . '</div>';
return $html;
},
)
),
),
)
);
// Render
echo $form->render($view);
// Output
<form enctype="application/x-www-form-urlencoded" action="" method="post">
<div>
<label for="foo">Foo</label>
</div>
<div>
<input type="text" name="foo" id="foo" value="" /><br />
Foobar...
</div>
</form>
--
List: [email protected]
Info: http://framework.zend.com/archives
Unsubscribe: [email protected]