-- Stefan Sturm <[EMAIL PROTECTED]> wrote (on Friday, 08 August 2008, 02:12 PM +0200): > I have an element decorator for my elements and it is working corrent. > > It looks like this: > public $elementDecorators = array( > 'ViewHelper', > 'MyErrors', > array(array('data' => 'HtmlTag'), array('tag' => 'div', 'class' > => > 'element')), > array('Label', array('class' => 'left')), > array(array('row' => 'HtmlTag'), array('tag' => 'div', 'class' > => 'row')), > ); > > This renders code like this: > <div class="row"> > <label for="txtUserName" class="required left > optional">Name</label> > <div class="element"> > <input type="text" name="txtUserName" id="txtUserName" > value="" > size="30" maxlength="20" class="required" /> > </div> > </div> > > This is what I need :-) > > But now my problem. Sometime I want to have two or more elements in > one row. Like perhaps zipcode and city. > This should be rendered like this: > <div class="row"> > <label for="txtZipcode" class="required left > optional">Zipcode/City</label> > <div class="element"> > <input type="text" name="txtZipcode" id="txtZipcode" > value="" > size="10" maxlength="10" class="required" /> > <input type="text" name="txtCity" id="txtCity" value="" > size="30" > maxlength="20" class="required" /> > </div> > </div> > > > I think, that I need to use DisplayGroups to achieve this. But I don't > get it to work :-(
What did you try? :) Here's what I'd try: you'll need to create a custom decorator for the display group, which I'll detail below, and then the following element/group definitions. $form->addDisplayGroupPrefixPath('My_Form_Decorator', 'My/Form/Decorator'); $form->addElement('text', 'txtZipcode', array( 'size' => 10, 'maxlength' => 10, 'class' => 'true', 'required' => 'true', 'decorators' => array('ViewHelper'), )); $form->addElement('text', 'txtCity', array( 'size' => 30, 'maxlength' => 20, 'class' => 'true', 'required' => 'true', 'decorators' => array('ViewHelper'), )); $form->addDisplayGroup(array('txtZipcode', 'txtCity'), 'zipCity', array( 'legend' => 'Zipcode/City', 'decorators' => array( 'FormElements', array('DivWrapper', array( 'labelFor' => 'txtZipcode', 'labelClass' => 'required left optional', )) ), )); The DivWrapper decorator would look like this: My_Form_Decorator_DivWrapper extends Zend_Form_Decorator_Abstract() { public function render($content) { $group = $this->getElement(); if (null === $group) { return $content; } $labelFor = $this->getOption('labelFor'); $labelClass = $this->getOption('labelClass'); $label = $group->getLegend(); $html =<<<EOH <div class="row"> <label for="$labelFor" class="$labelClass">$label</label> <div class="element"> $content </div> </div> EOH; return $html; } } Put the above in My/Form/Decorator/DivWrapper.php on your include path, and you should be set. > I think this is a common problem. So hopefully some can give me a hint > how my decorator needs to look like... -- Matthew Weier O'Phinney Software Architect | [EMAIL PROTECTED] Zend Framework | http://framework.zend.com/