Как отобразить обертки Foundation 5 вокруг элементов формы, используя Zend Framework

Я пытаюсь сделать форму Foundation 5 с проверкой Abide, используя Zend Form. Я все еще изо всех сил пытаюсь полностью понять, как использовать Zend's ViewHelpers и Decorators для рендеринга формы с помощью div, требуемых Foundation. Я могу обернуть элемент формы в правильно классифицированный div, но я не могу поместить несколько элементов в <div class="row"> например.

Вот что я не могу сделать:

1) Назначение класса каждому родительскому элементу div элемента формы. Я могу назначить каждому обёртку div один и тот же класс (см. Мой код ниже), но не отдельному элементу. Когда я попытался добавить $element->setAttrib('class','small-##') это применило его к <input /> элемент, а не тот обертка div. Например firstName а также lastName должно быть class="small-6" в то время как company на следующем ряду class="small-12"

2) Размещение нескольких элементов формы в <div class="row"> тег, а затем сделать это снова для следующей строки формы. Прямо сейчас я могу поместить каждый элемент в ряд, но я не знаю, как поместить несколько элементов в один и тот же элемент. <div class="row">,

3) В примерах Фонда <label> метки обернуть вокруг <input> тег, но Zend закрывает метку перед вводом. Имеет ли это значение?

Вот HTML-код, который я хочу визуализировать:

<form method="post" action="" enctype="multipart/form-data" data-abide>
<div class="row">
    <div class="large-12 columns">
      <div class="row">
            <div class="small-2 columns">
              <label for="display" class="inline">Display For: </label>
            </div>
            <div class="small-10 columns">
               <input type="radio" name="display" value="0" id="displayEveryone" checked><label for="displayEveryone" class="inline">Everyone</label>
               <input type="radio" name="display" value="999" id="displaySelf"><label for="displaySelf" class="inline">Only Me</label>
            </div>
      </div>
    </div>
</div>
<div class="row">
    <div class="small-6 columns">
        <label>First Name
        <input type="text" required class="contact" name="firstName" id="firstName" maxlength="25" autofocus="autofocus"/>
      </label>
      <small class="error">First name is required.</small>
    </div>
    <div class="small-6 columns">
        <label>Last Name
        <input type="text" required class="contact" name="lastName" id="lastName" maxlength="25"/>
      </label>
      <small class="error">Last name is required.</small>
    </div>
</div>
<div class="row">
    <div class="small-12 columns">
        <label>Company or Affiliation
        <input type="text" class="contact" name="company" id="company" maxlength="125"/>
      </label>
    </div>
</div>
<div class="row">
    <div class="small-4 columns">
        <label>Work Phone
        <input type="text" class="contact" name="workPhone" id="workPhone" />
      </label>
    </div>
    <div class="small-4 columns">
        <label>Cell Phone
        <input type="text" class="contact" name="cellPhone" id="cellPhone" />
      </label>
    </div>
    <div class="small-4 columns">
        <label>Home Phone
        <input type="text" class="contact" name="homePhone" id="homePhone" />
      </label>
    </div>
</div>
</form>

А вот сценарий формы Zend, который у меня сейчас есть и который нужно изменить:

class Application_Form_Contact extends Zend_Form
{

    public function init()
    {
        $this->setMethod('post');
        $this->setName('addContact');
        $this->setAttrib('enctype', 'multipart/form-data') ;
        $id = new Zend_Form_Element_Hidden('contactID');$id->addFilter('Int');

        $display= new Zend_Form_Element_Radio('display');
        $display->setLabel('Display For: ')
                ->setRequired(true)
                ->addMultiOptions(array(0 => "Everyone", 999 => "Only Me"));

        $fName = new Zend_Form_Element_Text('firstName');
        $fName->setLabel('First Name: ')
                ->setRequired(true)
                ->setAttrib('maxlength', 25)
                ->setAttrib('autofocus', 'autofocus')
                ->addFilter('StripTags')
                ->addFilter('StringTrim');

        $lName = new Zend_Form_Element_Text('lastName');
        $lName->setLabel('Last Name: ')
                ->setRequired(true)
                ->setAttrib('maxlength', 25)
                ->addFilter('StripTags')
                ->addFilter('StringTrim');

        $company = new Zend_Form_Element_Text('company');
        $company->setLabel('Company: ')
                ->setRequired(false)
                ->setAttrib('maxlength', 125)
                ->addFilter('StripTags')
                ->addFilter('StringTrim');

        $workPhone = new Zend_Form_Element_Text('workPhone');
        $workPhone->setLabel('Work Phone: ')
                ->setRequired(false)
                ->setAttrib('class', 'small-4')
                ->addFilter('StripTags')
                ->addFilter('StringTrim');

        $cellPhone = new Zend_Form_Element_Text('cellPhone');
        $cellPhone->setLabel('Cell Phone: ')
                ->setRequired(false)
                ->setAttrib('class', 'small-4')
                ->addFilter('StripTags')
                ->addFilter('StringTrim');

        $homePhone = new Zend_Form_Element_Text('homePhone');
        $homePhone->setLabel('Home Phone: ')
            ->setRequired(false)
            ->setAttrib('class', 'small-4')
            ->addFilter('StripTags')
            ->addFilter('StringTrim');

        $otherPhone = new Zend_Form_Element_Text('otherPhone');
        $otherPhone->setLabel('Other Phone: ')
                ->setRequired(false)
                ->addFilter('StripTags')
                ->addFilter('StringTrim');

        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setAttrib('id', 'submitbutton');

        $this->addElements(array($id, $display, $fName, $lName, $company, $workPhone, $cellPhone, $homePhone, $otherPhone, $submit));

        $this->setElementDecorators(array(
            'ViewHelper',
            array('Description'),
            array('Errors'),
            array(array('data' => 'HtmlTag'), array('tag' => 'div', 'class'=>'small-6 columns')),
            array('Label'),
            array(array('row' => 'HtmlTag'), array('tag' => 'div', 'class'=> 'row'))
            ));

        $submit->setDecorators(array(
            'ViewHelper',
            array(array('data' => 'HtmlTag')),
            array(array('row' => 'HtmlTag'))
            ));

        $this->setDecorators(array(
            'FormElements',
            array('HtmlTag', array('tag' => 'div', 'class'=>'small-12 columns')),
            array('Form', array('data-abide'=>'data-abide'))
            ));                     
        $view = $this->getView();
        $formErrors = $view->getHelper('formErrors');
        $formErrors->setElementStart('<small class="error">')
                    ->setElementSeparator('')
                    ->setElementEnd('</small>');      
    }
}

Спасибо за помощь.

1 ответ

Решение

Декораторы по умолчанию загружать не нужно

По умолчанию декораторы по умолчанию загружаются во время инициализации объекта. Вы можете отключить это, передав опцию 'disableLoadDefaultDecorators' в конструктор:

$element = new Zend_Form_Element('foo', 
    array('disableLoadDefaultDecorators' => true)
);

Создайте представление и добавьте элементы формы следующим образом:

<?php echo $this->YourFormObject->getElement('YourElementID'); ?>

Я сделал эту надежду, это полезно для вас...

Другие вопросы по тегам