Zend Form. Добавление ссылки и размещение некоторых элементов в div - PullRequest
0 голосов
/ 30 августа 2010

У меня есть какая-то зенд форма. Это мой код:

private function _createForm($action) {

    $form = new Zend_Form();

    $form->setName($action . '_form');
    $form->setMethod('post');

    // Main tab
    $title = $form->createElement('text', 'title');
    $title->setLabel('Title')
          ->setAttrib('maxlength',50)->setAttrib('id', 'title')->setAttrib('class', $action . '_title')
          ->setAttrib('style','height: 15px; width: 200px;')
          ->setRequired(true)
          ->setDecorators(array(
            'ViewHelper',
            array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class'  => 'element')),
            array('Label', array('tag' => 'td')),
            array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
          ));

    $description = $form->createElement('textarea', 'description');
    $description->setLabel('Description')
                ->setAttrib('style','height: 50px; width: 200px;')->setAttrib('id', 'description')->setAttrib('class', $action . '_description')
                ->setDecorators(array(
                  'ViewHelper',
                  array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class'  => 'element')),
                  array('Label', array('tag' => 'td')),
                  array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
                ));
    // Advanced tab
    $qualif_time = $form->createElement('text', 'qualif_time');
    $qualif_time->setLabel('Qualification Time')
        ->setAttrib('maxlength',11)->setAttrib('id', 'qualif_time')->setAttrib('class', $action . '_qualif_time')->setAttrib('style','height: 15px; width: 200px;')
        ->setDecorators(array(
          'ViewHelper',
          array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class'  => 'element')),
          array('Label', array('tag' => 'td')),
          array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
        ));
    $total_assoc_down = $form->createElement('text', 'total_assoc_down');
    $total_assoc_down->setLabel('Total Associates Downline')
        ->setAttrib('maxlength',11)->setAttrib('id', 'total_assoc_down')->setAttrib('class', $action . '_total_assoc_down')->setAttrib('style','height: 15px; width: 200px;')
        ->setDecorators(array(
          'ViewHelper',
          array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class'  => 'element')),
          array('Label', array('tag' => 'td')),
          array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
        ));

    $submit = $form->createElement('submit', $action);
    $submit->setAttrib('id', 'submit')->setAttrib('value', $action)
           ->setDecorators(array(
             'ViewHelper',
             array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class'  => 'element')),
             array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
           ));

    $form->addElements(array(
        $title, $description, $qualif_time, $total_assoc_down
    ));

    $form->addDisplayGroup(array('qualif_time', 'total_assoc_down'), 'advanced_tab');
    $advanced_tab = $form->getDisplayGroup('advanced_tab');
    $form->addElements(array($advanced_tab, $submit));

    $form->setDecorators(array(
        'FormElements',
        array('HtmlTag', array('tag' => 'table')),
        'Form',
    ));
    return $form;
}

Моя задача - поместить $ title и description в один div и поместить $ total_assoc и $ qualif_time в другой div. И я должен вставить href (ссылку) перед этим div. Я пытался сделать это с помощью addDisplayGroup (), но он создает набор полей. Мне нужно Div.

Thx.

1 Ответ

1 голос
/ 04 августа 2012

Попробуйте использовать декоратор формы. *

Чтобы установить docorator формы, вы должны добавить что-то вроде этого в объект формы

$decoratorFile = "path to decoration phtml for example user/" path starts automatic from views/scripts

$paramsArr = array('viewScript' => $decoratorFile);
$decorator = new Zend_Form_Decorator_ViewScript($paramsArr);

$this->setDecorators(array($decorator));  // $this is a your form object

Теперь вам нужно подготовить phtml для всех элементов формы:

<form class="formU" enctype="application/x-www-form-urlencoded"
    action="<?= $this->element->getAction() ?>"
    method="<?= $this->element->getMethod() ?>"
    name="<?= $this->element->getName() ?>"
    id="<?= $this->element->getId() ?>">

    <?php 
    // all field in foreach
    $formElements = $this->element->getElements();
    foreach ($formElements as $formElement) {
        echo $formElement;
    }

    // or you can use something like this for each field

    $this->element->getElement('elementName')

    ?>
</form>

Если вам этого недостаточно. Вы должны использовать decoradors для каждого поля:

http://framework.zend.com/manual/en/zend.form.decorators.html

Декораторы для полевых работ аналогично.

...