ZF1: добавить тип ввода в качестве класса в поле ввода тегов

Есть ли способ добавить тип элемента ввода в атрибут класса в теге упаковки? В приведенном ниже примере кода это может быть декоратор «Div», который уже имеет класс «элемент» ИЛИ тег LI.

(я пропустил некоторый код)

class My_Form extends Zend_Form
{
  public function loadDefaultDecorators($disableLoadDefaultDecorators = false)

    //Set the decorators we need:
    $this->setElementDecorators(array(
        'ViewHelper',
        'Errors',
        array('Description', array('tag' => 'p', 'class' => 'description', 'escape' => false)),
        array('decorator' => array('Div' => 'HtmlTag'), 'options' => array('tag' => 'div', 'class' => 'element')),
        array('Label', array('escape' => false)),        
        array('decorator' => array('Li' => 'HtmlTag'), 'options' => array('tag' => 'li')),        
    ));
  }
}

ИЛИ если возможно создать My_Form_Element и автоматически расширить все Zend_Form_Element_XXX из него.

Я хотел бы закончить с разметкой, как это

<form>
  <ul>
    <li>
      <label for="contactForm-contact_subject" class="optional">Regarding:</label>
      <div class="element form-input-text"><input type="text" name="contactForm[contact_subject]" id="contactForm-contact_subject" value="" /></div>
    </li>
    <li>
      <label for="contactForm-contact_message" class="required">Message:</label>
      <div class="element form-textarea"><textarea name="contactForm[contact_message]" id="contactForm-contact_message" rows="24" cols="80"></textarea></div>
    </li>
    <li>
      <div class="element form-input-submit"><input type="submit" name="contactForm[form_contact_submit]" id="contactForm-form_contact_submit" value="form_contact_submit" /></div>
    </li>
  </ul>
</form>

person Phliplip    schedule 01.07.2013    source источник


Ответы (1)


Просто переопределите метод рендеринга:

class My_Form extends Zend_Form
{   
    public function loadDefaultDecorators($disableLoadDefaultDecorators = false)
    {
        //Set the decorators we need:
        $this->setElementDecorators(array(
            'ViewHelper',
            'Errors',
            array('Description', array('tag' => 'p', 'class' => 'description', 'escape' => false)),
            array('decorator' => array('Div' => 'HtmlTag'), 'options' => array('tag' => 'div', 'class' => 'element')),
            array('Label', array('escape' => false)),        
            array('decorator' => array('Li' => 'HtmlTag'), 'options' => array('tag' => 'li')),        
        ));
    }

    public function render(Zend_View_Interface $view = null)
    {
        /* @var $element Zend_Form_Element */
        foreach ($this->getElements() as $element) {
            $type = end(explode('_', $element->getType()));
            $element->getDecorator('Div')->setOption('class', 
                sprintf('%s form-%s', 'element', strtolower($type)));
        }

        return parent::render($view);
    }    
}
person b.b3rn4rd    schedule 03.07.2013