6.6 视图装饰

Solar_View_Helper_Form辅助类帮助你在变化的结构中装饰元素的输出:

  • 默认的decorateAsDlList()方法把所有元素放置在<dl>列表中,其中标记文本在<dt>标签中,元素的值在<dd>标签中。

  • decorateAsTable()方法把所有元素放置在<table>中。每对标记文本/值在<tr>标签中,其中,标记文本在<th>标签中,元素值在<td>标签中。

  • decorateAsDivs()方法把所有元素放置在嵌套的<div>标签中。元素列表作为整体在一个<div>标签中,每对标记文本/值在另一个<div>标签中。

  • 最后,decorateAsPlain()方法移除所有的结构上的装饰标签。

我们要做的就是调用正确的装饰方法,剩下的由表单辅助类来完成。下面是博客演示示例中edit.php视图的代码片断,我们在文件里添加了一个额外的方法:

<?php
    echo $this->form()             
              ->auto($this->form)  
              ->addProcess('save')
              ->decorateAsDivs()  // use <div>s instead of <dl> tags
              ->fetch();

输出结果是:

<form action="/blog/edit/1" method="post" enctype="multipart/form-data">
    <div class="list">
        
        <div class="blog-status">
            <label for="blog-status" class="blog-status">Status</label>
            <select name="blog[status]" id="blog-status" class="input-select blog-status">
                <option value="draft" label="draft">draft</option>
                <option value="public" label="public" selected="selected">public</option>
            </select>
        </div>
        
        <div class="blog-title require">
            <label for="blog-title" class="blog-title require">Title</label>
            <input type="text" name="blog[title]" value="Public Blog Entry" 
                maxlength="63" size="60" id="blog-title" class="input-text 
                blog-title require"
            />
        </div>
        
        <div class="blog-body">
            <label for="blog-body" class="blog-body">Body</label>
            <textarea name="blog[body]" rows="18" cols="60" id="blog-body" 
                class="input-textarea blog-body">First post!</textarea>
        </div>

        <div class="process-save">
            <input type="submit" name="process" value="Save" id="process-save"
                class="input-submit process-save"
            />
        </div>
    </div>
</form>