Zend Form。添加href并在div中放置一些元素

时间:2010-08-30 06:45:30

标签: php zend-framework html zend-form

我有一些表现形式。这是我的代码:

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中。我应该在这个div之前插入href(link)。我试图用addDisplayGroup()来做,但它创建了一个字段集。我需要div。

THX。

1 个答案:

答案 0 :(得分:1)

尝试使用表单装饰器。 *

要设置表单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

现场装饰工作同样如此。