1

我正在使用 ViewScripts 来装饰我的表单元素。使用单选元素,分隔符通常可以被覆盖,但是当我使用 ViewScript 时,覆盖被忽略了。

当我使用以下调用和 ViewScript 时,单选元素由“<br />”分隔,而不是我指定的空格。如果保留默认装饰器,则覆盖有效。

$this->addElement('radio', 'active', array(
    'disableLoadDefaultDecorators' => true,
    'decorators' => array(array('ViewScript', array('viewScript' => 'form/multi.phtml'))),
    'label' => 'Active',
    'required' => true,
    'multiOptions' => array('1' => 'Yes', '0' => 'No',),
    'value' => '1',
    'separator' => ' ',
    'filters' => array(),
    'validators' => array(),
));

视图脚本:

<div class="field <?php echo strtolower(end(explode('_',$this->element->getType()))) ?><?php if($this->element->hasErrors()): ?> errors<?php endif; ?>" id="field_<?php echo $this->element->getId(); ?>">
    <?php if (0 < strlen($this->element->getLabel())): ?>
        <?php echo $this->formLabel($this->element->getName(), $this->element->getLabel());?>
    <?php endif; ?>
    <span class="value"><?php echo $this->{$this->element->helper}(
        $this->element->getName(),
        $this->element->getValue(),
        $this->element->getAttribs(),
        $this->element->getMultiOptions()
    ); ?></span>
    <?php if ($this->element->hasErrors()): ?>
        <?php echo $this->formErrors($this->element->getMessages()); ?>
    <?php endif; ?>
    <?php if (0 < strlen($this->element->getDescription())): ?>
        <span class="hint"><?php echo $this->element->getDescription(); ?></span>
    <?php endif; ?>
</div>
4

3 回答 3

7

在视图脚本中,这行 $this->{$this->element->helper}(...) 运行Zend View Helpers 文档中列出的函数。本例中的函数是 formRadio()。formRadio() 的第五个参数是分隔符!添加第五个参数,通过引用元素,解决了问题:

<span class="value"><?php echo $this->{$this->element->helper}(
    $this->element->getName(),
    $this->element->getValue(),
    $this->element->getAttribs(),
    $this->element->getMultiOptions(),
    $this->element->getSeparator()
); ?></span>
于 2010-01-28T20:26:48.380 回答
6

我遇到了这个问题,我已经通过使用将 disableLoadDefaultDecorators 设置为true和 separator to&nbsp;或任何你需要的东西来解决。

$form->addElement('multiCheckbox', 'myFields', array(
    'disableLoadDefaultDecorators' => true
    ,'separator'    => '&nbsp;'
    ,'multiOptions' => array(
        'title'       => 'Title'
        ,'first_name' => 'First Name'
        ,'surname'    => 'Surname'
    )
    ,'decorators'   => array(
        'ViewHelper'
        ,'Errors'
        ,array('HtmlTag', array('tag' => 'p'))          
    )
));
于 2010-06-01T09:56:32.473 回答
2

实际上,它可以在一行中完成:

echo $this->element->setSeparator('&nbsp;');
于 2013-07-19T22:42:52.720 回答