Zend Framework - 使用哪些装饰器?

时间:2011-08-20 19:00:43

标签: zend-framework zend-form

我想更改html标记。我想更改<dl>标记的<div>并将标签和元素一起包装在<div>标记中,以便我可以向其应用浮点数。  目前我的元素输出如下所示:

<fieldset id="fieldset-languages">
    <legend>Languages</legend>
    <dl>

        <dt id="lang1-label">
            <label for="lang1" class="optional">Language</label>
        </dt>
        <dd id="lang1-element">
            <select name="lang1" id="lang1" class="input-select">
                <option value="0" label="English">English</option>
                <option value="1" label="French">French</option>
            </select>
        </dd>

        <dt id="lang2-label">
            <label for="lang1" class="optional">Language</label>
        </dt>
        <dd id="lang2-element">
            <select name="lang2" id="lang2" class="input-select">
                <option value="0" label="German">German</option>
                <option value="1" label="Spanish">Spanish</option>
            </select>
        </dd>

    </dl>
</fieldset>

我想把它改成这个......

<fieldset id="fieldset-languages">
    <legend>Languages</legend>
    <div>
        <div>
            <p id="lang1-label">
                <label for="lang1" class="optional">Language</label>
            </p>
            <p id="lang1-element">
                <select name="lang1" id="lang1" class="input-select">
                    <option value="0" label="English">English</option>
                    <option value="1" label="French">French</option>
                </select>
            </p>
        </div>

        <div>
            <p id="lang2-label">
                <label for="lang1" class="optional">Language</label>
            </p>
            <p id="lang2-element">
                <select name="lang2" id="lang2" class="input-select">
                    <option value="0" label="German">German</option>
                    <option value="1" label="Spanish">Spanish</option>
                </select>
            </p>
        </div>

    </div>
</fieldset>

我已经发现我可以使用Html装饰器将dt / dd更改为<p>标签 - 但不能将标签和元素包装在div中。

1 个答案:

答案 0 :(得分:1)

你的装饰者应该是这样的(只是一个例子):

      $this->setDecorators(array(
         'ViewHelper',
          array('Description', array('tag' => 'p', 'class' => 'description')),
          'Errors',
          array('HtmlTag', array('tag' => 'div')),
          array('Label', array('tag' => 'p')),
          array(array('elementDiv' => 'HtmlTag'), array('tag' => 'div')),
      ));

您可以阅读this article的“使用标准装饰器自定义输出”部分 至少,了解表单装饰器的工作方式对我有帮助

引用文章:

  

“添加装饰器时,您可以选择别名。什么   这样做是允许您使用不同的名称存储装饰器    - 允许您通过该名称从堆栈中检索它。这个   当您需要添加两个或更多相同类型时,它非常有用   装饰者;事实上,在这种情况下,如果你不做别名的话   该类型的最后一个注册装饰将覆盖所有其他   实例!您通过传递数组来完成别名   装饰器类型,具有单个键/值对,别名为   key,以及装饰器类型作为值。例如,如果您需要   要在堆栈中使用两个不同的HTML标记,您可以执行某些操作   如下......“

(继续阅读本节的这一部分; - ))