【问题标题】:What will be the zend form decorator for the following code?以下代码的 zend 表单装饰器是什么?
【发布时间】:2011-11-05 21:33:34
【问题描述】:

将这两个元素并排放置的装饰器应该是什么。通常它会渲染默认的zend的“dl-dt-dd”结构。我需要将这两个元素放在同一个 dd 中,并在 dt 中使用一个公共的单个标签。

$card_expmonth = new Zend_Dojo_Form_Element_FilteringSelect('card_expmonth');
$card_expmonth->setLabel('Card Expiration')
    ->setMultiOptions(array(1=>'1','2','3','4','5','6','7','8','9','10','11','12'))
    ->setAttrib('style','width:100px;')
    ->setRequired(true);

$card_expyear = new Zend_Dojo_Form_Element_FilteringSelect('card_expyear');
$card_expyear->setMultiOptions(array(2011=>'2011','2012','2013','2014','2015','2016','2017','2018','2019','2020','2021','2022','2023','2024','2025'))
    ->setAttrib('style','width:100px;')
    ->setRequired(true);

请有人帮助我。

【问题讨论】:

    标签: zend-framework decorator


    【解决方案1】:
    $card_expmonth->setDecorators(array(
        'ViewHelper',
        array(array('dd' => 'HtmlTag'), array('tag' => 'dd', 'openOnly' => true)),
        array('Label', array('tag' => 'dt')),
        array(array('dl' => 'HtmlTag'), array('tag' => 'dl', 'openOnly' => true))
    ));
    
    $card_expyear->setDecorators(array(
        'ViewHelper',
        array(array('dd' => 'HtmlTag'), array('tag' => 'dd', 'closeOnly' => true)),
        array(array('dl' => 'HtmlTag'), array('tag' => 'dl', 'closeOnly' => true))
    ));
    

    未测试。如果它不起作用,请告诉我。

    另请阅读http://devzone.zend.com/article/3450

    【讨论】:

    • 它将是 DijitElement 而不是 ViewHelper。谢谢你给了我 openOnly 和 closeOnly 的想法。
    【解决方案2】:

    我建议你在这种情况下不要使用装饰器:

    $card_expmonth->setDecorators(array('ViewHelper'));
    $card_expyear->setDecorators(array('ViewHelper'));
    

    在视图中:

    <form action="<?php echo $form->getAction() ?>"
          method="<?php echo $form->getMethod() ?>"
          enctype="<?php echo $form->getEnctype() ?>"
          accept-charset="<?php echo $form->getAttrib('accept-charset') ?>"
          id="<?php echo $form->getId() ?>">
        <dl>
            <dt><?php echo $form->card_expmonth->getLabel() ?></dt>
            <dd>
                <?php echo $form->card_expmonth ?>
                <?php echo $form->card_expyear ?>
            </dd>
        </dl>
    </form>
    

    此外,您应该关心错误输出。

    【讨论】:

    • 如果无论如何都可以通过装饰器来完成,那将是最好的。这里不可能吗?
    猜你喜欢
    • 2011-01-10
    • 2011-10-07
    • 2012-10-23
    • 1970-01-01
    • 2011-07-13
    • 2011-01-24
    • 1970-01-01
    • 2011-06-24
    • 2011-08-08
    相关资源
    最近更新 更多