Temat: Displaygroup + ViewScript
ja robilem :)
Krok 1:
Zrob sobie wlasny dekorator dla display grupy:
/**
* @class FreeCode_Form_Decorator_CustomDisplayGroup
* @brief Custom form decorator.
*/
class FreeCode_Form_Decorator_CustomDisplayGroup extends Zend_Form_Decorator_Abstract
{
/**
* Render display group.
* @param string $content
* @return string
*/
public function render($content)
{
$element = $this->getElement();
if ($element->getView() === null)
return $content;
$id = $element->getName();
$attribs = $element->getAttribs();
$class = (isset($attribs['class']) ? ' '.$attribs['class'] : '');
if (isset($attribs['legend']))
$legend = '<div id="'.$id.'_legend" class="legend">'.FreeCode_Translator::_($attribs['legend']).'</div>';
else
$legend = '';
$content = '<div id="'.$id.'_elements" class="elements">'.$content.'</div>';
$html =
'<div id="'.$id.'" class="display_group'.$class.'">'.
$legend.
$content.
'</div>';
return $html;
}
}
Krok 2: Zrob sobie klase dziedziczaca po Zend_Form a w niej:
public function __construct($options = null)
{
parent::__construct($options);
$this->addDisplayGroupPrefixPath('FreeCode_Form_Decorator', 'FreeCode/Form/Decorator/');
}
//---------
/**
* Overloaded for adding custom decorators to display group.
* @param array $elements
* @param mixed $name
* @param mixed $options
* @return void
*/
public function addDisplayGroup(array $elements, $name, $options = null)
{
$return = parent::addDisplayGroup($elements, $name, $options);
$displayGroup->addDecorator('CustomDisplayGroup');
return $return;
}
//-----
Krok 3: Zrob display grupe w klasie formularza:
Przykladowo:
$this->addElements(array(
$login,
$name,
$email,
$www,
$bio,
$submit
));
$this->addDisplayGroup(
array('login', 'name', 'email'),
'_required',
array('legend' => 'Required')
);
$this->addDisplayGroup(
array('www', 'bio'),
'_custom',
array('legend' => 'Custom')
);
$this->addDisplayGroup(array('submit'), 'buttons');
gdzie login, name, email to id elementow Zend_Form_Element_* ktore maja byc w danej grupie
W wyniku dostaniesz dokladnie to co chciales uzyskac, dekorator generuje potrzebny kod, mozesz go dowolnei przeksztalcic, polecam pakowac wszystko w divy wtedy zmiana wygladu wszystkich formularzy to jedynie kosmetyka css