如何改变zend形式的标准装饰

时间:2014-05-17 23:04:21

标签: zend-framework

在我的目录表格中我有FormArena

$this->addElement('radio', 'warrior',array(
            'decorators' => array(
                'ViewHelper',
            ),
            'disableLoadDefaultDecorators' => true,
            'separator' => '', 
        ));

在我的观看页面上,我有

 <?php echo $this->forms['formarena']->getItem('warrior'); ?>

在控制器中我有

$getWarriorsList = $this->objArena->getActiveUsers($this->varUserData['id']);

        $objFormArena = new FormArena();
        if (!empty($getWarriorsList)){
            foreach($getWarriorsList AS $varWarriors)
                $varOptions[$varWarriors['id_users']] = $varWarriors['nick'];
            $objFormArena->warrior->addMultiOptions($varOptions);
            unset($varOptions); 
        }

       $this->view->forms = array(
            'formarena' => $objFormArena,
        );

好的,这很容易。我从base获取数据并添加选项以供控制器查看。但是,当我看到页面上的源代码时,我有:

<div class="radio">
    <label for="warrior-27">
        <input type="radio" name="warrior" id="warrior-27" value="27">makapaka</label>
    <label for="warrior-29">
        <input type="radio" name="warrior" id="warrior-29" value="29">Kasia</label>
</div>

但我需要做

<div class="radio">
    <input id="warrior-27" type="radio" name="warrior" value="27">
    <label for="warrior-27">makapaka</label>
    <input id="warrior-29" type="radio" name="warrior" value="29">
    <label for="warrior-29">Kasia</label>
</div>

我应该怎么做。我尝试从网上搜索,但我在2天内仍然没有:(

1 个答案:

答案 0 :(得分:0)

当前选项不允许以您希望的格式进行渲染。

它只能是

<div class="radio">
    <label for="warrior-27">
        <input type="radio" name="warrior" id="warrior-27" value="27">makapaka</label>
    <label for="warrior-29">
        <input type="radio" name="warrior" id="warrior-29" value="29">Kasia</label>
</div>

<div class="radio">
    <label for="warrior-27">
        makapaka
        <input type="radio" name="warrior" id="warrior-27" value="27"></label>
    <label for="warrior-29">
        Kasia
        <input type="radio" name="warrior" id="warrior-29" value="29"></label>
</div>

要像您提到的那样呈现表单元素,您需要创建自定义视图助手并将其作为选项传递给ViewHelper装饰器,或使用ViewScript装饰器生成自定义输出。

就个人而言,我更喜欢ViewScript装饰器,因为它易于使用。

使用示例:

$this->addElement('radio', 'warrior',array(
        'decorators' => array(
            array('ViewScript', array('viewScript' => 'decorator.phtml'))
        )
    ));

并在 decorator.phtml

<div class="radio">
    <?php foreach($this->element->getMultiOptions() as $value => $label): ?>
    <input id="<?php echo $this->element->getName() ?>-<?php echo $value ?>" type="radio" name="<?php echo $this->element->getName() ?>" value="<?php echo $value ?>">
    <label for="<?php echo $this->element->getName() ?>-<?php echo $value ?>"><?php echo $label ?></label>
    <?php endforeach ?>
</div>

NB :此脚本文件可用于所有表单无线电元素

希望有所帮助