I have my current form setup to use a table layout without any issues except for when I try to apply my Error decorators.
Before the form is submitted the form should look like: <tr> <td id="email-label"> <label for="email" class="formLabel required">1. Your Email Address*</label> </td> <td class="formInput"> <input type="text" name="email" id="email" value="" requiredSuffix="*" size="30"> <div class="hint">We guarantee we won't spam you</div> </td> </tr> ..... if an error needs to be displayed then the error message should display underneath it's corresponding form element, which it does. My problem is that if I apply my custom error decorator, if there isn't an error message then I get double "tr" tags around the elements: <form id="signup" enctype="application/x-www-form-urlencoded" action="" method="post"><table> <tr><tr><td id="email-label"><label for="email" class="formLabel required">1. Your Email Address*</label></td> <td class="formInput"> <input type="text" name="email" id="email" value="" requiredSuffix="*" size="30"> <div class="hint">We guarantee we won't spam you</div></td></tr></tr> <tr><tr><td id="pass-label"><label for="pass" class="formLabel required">2. Choose Password*</label></td> <td class="formInput"> <input type="password" name="pass" id="pass" value="" requiredSuffix="*" size="30"> <div class="hint">Minimum of 8 characters</div></td></tr></tr> <tr><tr><td id="password_confirm-label"><label for="password_confirm" class="formLabel required">3. Verify Password*</label></td> <td class="formInput"> <input type="password" name="password_confirm" id="password_confirm" value="" requiredSuffix="*" size="30"></td></tr></tr> <tr><tr><td id="username-label"><label for="username" class="formLabel required">4. Choose Username*</label></td> <td class="formInput"> <input type="text" name="username" id="username" value="" requiredSuffix="*" size="30"></td></tr></tr> // standard element decorator protected $_standardElementDecorator = array( 'ViewHelper', array('Description', array('escape' => false, 'tag' => 'div')), array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'formInput')), array('Label', array('tag' => 'td', 'class' => 'formLabel')), array(array('row' => 'HtmlTag'), array('tag' => 'tr')), array('HtmlTagError', array('tag'=>'tr')) ); //HtmlTagError <?php require_once 'Zend/Form/Decorator/HtmlTag.php'; class Site_Form_Decorator_HtmlTagError extends Zend_Form_Decorator_HtmlTag { public function render($content) { // Get element contained by decorator $element = $this->getElement(); // Get view object $view = $element->getView(); if (null === $view) { return parent::render($content); } $errCount = 0; // If not a single element, get elements and all associated error messages if (method_exists($element, 'getElements')) { $elements = $element->getElements(); foreach ($elements as $el) { if ($el->getMessages()) { // Count errors $errCount++; $errors[] = $el->getMessages(); } } } else { // If single element, get error messages $errors = $element->getMessages(); } if (0 == $errCount && empty($errors)) { return parent::render($content); } // Add error class to HtmlTag tag. // Use array merge to ensure that existing options are persisted $options = $this->getOptions(); if (array_key_exists('class', $options)) { $options['class'] = $options['class'] . ' error'; } else { $options['class'] = 'error'; } $this->setOptions($options); // Set up the FormErrors view helper $displayErrors = new Zend_View_Helper_FormErrors(); $displayErrors->setView($view); $displayErrors->setElementStart('<td class="error" colspan="2">') ->setElementSeparator("<br/>\n") ->setElementEnd("</td>\n"); // If only one field has errors if (0 == $errCount) { $html = $displayErrors->formErrors($errors); $content .= $html; } else { // If more than one field has errors (usually a display group) $html = ''; foreach ($errors as $error) { $html .= $displayErrors->formErrors($error); } $content .= $html; // Append generic error message to content //$content .= '<p class="error">This is a required field</p>'; } // Render HtmlTag decorator return parent::render($content); } } Any suggestions? -- View this message in context: http://www.nabble.com/Zend-Form-Error-Decorators-tp24158654p24158654.html Sent from the Zend Framework mailing list archive at Nabble.com.