【问题标题】:Zend Framework - which decorators to use?Zend Framework - 使用哪些装饰器?
【发布时间】:2011-08-20 19:00:42
【问题描述】:

我想更改 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 更改为 &lt;p&gt; 标签 - 但不能将标签和元素包装在 div 中。

【问题讨论】:

    标签: zend-framework zend-form


    【解决方案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 的“使用标准装饰器自定义输出”部分 至少,了解表单装饰器的工作原理对我很有帮助

    引自文章:

    "当添加一个装饰器时,你可以选择给它起别名。什么 这样做是允许您使用不同的名称存储装饰器 -- 这允许您通过该名称从堆栈中检索它。这 当您需要添加两个或多个相同类型时主要有用 装饰师;实际上,在这种情况下,如果您不使用别名,则 该类型的最后注册装饰器将覆盖所有其他 实例!您通过传递一个数组作为别名来完成别名 装饰器类型,具有单个键/值对,别名为 键,装饰器类型作为值。例如,如果您需要 要在你的堆栈中使用两个不同的 HTML 标签,你可以做一些事情 像下面这样……”

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

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 2012-10-23
      • 2011-12-29
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2011-01-24
      • 2011-07-22
      • 1970-01-01
      相关资源
      最近更新 更多