<sect1 id="zend.view.introduction">
    <title>简介</title>

    <para>
        <code>Zend_View</code>是用来在MVC模式中处理View（视图）部份的一个类。也就是说它用来使视图部份的代码与Model及controller部分分离。它提供了helper,output filter,variable escaping等几个功能组件。
    </para>

    <para>
        <code>Zend_View</code>使用PHP本身作为你的模板，或者你也可以建立其它模板引擎的实例，并用你的view代码来对其进行操作。
    </para>

    <para>
        使用<code>Zend_View</code>主要有两步： 1. 你的Controller建立一个<code>Zend_View</code>实例，并将需要的变量传递给它； 2. Controller告诉<code>Zend_View</code>解析一个特定的视图，生成View输出的内容。
    </para>

    <sect2 id="zend.view.introduction.controller">
        <title>控制器脚本</title>

        <para>
            下面是一个简单的例子。假设你有一个书籍清单，想把它打印出来。控制器代码可能看起来是这样的：
        </para>

        <programlisting role="php"><![CDATA[<?php
//使用一个模型来获取书籍作者和标题相关数据。
$data = array(
    array(
        'author' => 'Hernando de Soto',
        'title' => 'The Mystery of Capitalism'
    ),
    array(
        'author' => 'Henry Hazlitt',
        'title' => 'Economics in One Lesson'
    ),
    array(
        'author' => 'Milton Friedman',
        'title' => 'Free to Choose'
    )
);

//传递数据给Zend_View类的实例　
Zend_Loader::loadClass('Zend_View');
$view = new Zend_View();
$view->books = $data;

//解析一段View代码"booklist.php"来显示数据
echo $view->render('booklist.php');]]>
        </programlisting>

    </sect2>

    <sect2 id="zend.view.introduction.view">

        <title>视图脚本</title>

        <para>
            现在我们看看相关的视图代码"booklist.php"。这是一段普通的代码，但是有一点特别：它是在<code>Zend_View</code>实例的内部运行的，所以$this指向的是<code>Zend_View</code>实例和类方法。(controller传递给<code>Zend_View</code>实例的变量是public的)。一段非常基本的视图代码看起来是这样的：
        </para>

        <programlisting role="php"><![CDATA[<?php if ($this->books): ?>

    <!-- 包含几本书信息的HTML表格. -->
    <table>
        <tr>
            <th>Author</th>
            <th>Title</th>
        </tr>

        <?php foreach ($this->books as $key => $val): ?>
        <tr>
            <td><?php echo $this->escape($val['author']) ?></td>
            <td><?php echo $this->escape($val['title']) ?></td>
        </tr>
        <?php endforeach; ?>

    </table>

<?php else: ?>

    <p>There are no books to display.</p>

<?php endif; ?>]]>
        </programlisting>

        <para>
            注意我们使用escape()来转义输出。
        </para>

    </sect2>

    <sect2 id="zend.view.introduction.options">
        <title>选项</title>

        <para>
            <code>Zend_View</code>有若干选项来配置视图脚本的运行。
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <code>basePath</code>: 指示一个基本路径，可以在下面设置script、 helper 和 filter 路径。目录结构如下：
                </para>

                <programlisting role="php"><![CDATA[
base/path/
    helpers/
    filters/
    scripts/]]>
                </programlisting>

                <para>
                    可以通过 <code>setBasePath()</code>、<code>addBasePath()</code>、或 <code>basePath</code>设置给构造器。
                </para>
            </listitem>

            <listitem><para>
                <code>encoding</code>: 指定 <code>htmlentities()</code>、<code>htmlspecialchars()</code>和其它操作所采用的字符集，缺省为 ISO-8859-1 (latin1)。也可以通过<code>setEncoding()</code> 或 <code>encoding</code> 设置给构造器。
            </para></listitem>

            <listitem><para>
                <code>escape</code>: 指定<code>escape()</code>所使用的回调函数（callback）。也可以通过<code>setEscape()</code>或<code>escape</code>设置给构造器。
            </para></listitem>

            <listitem><para>
                <code>filter</code>: 指示在解析视图脚本后使用的过滤器。可以通过<code>setFilter()</code>、<code>addFilter()</code>或者<code>filter</code>设置给构造器。
            </para></listitem>

            <listitem><para>
                <code>strictVars</code>: 指定某些未初始化的视图变量被访问时，<code>Zend_View</code>必须发出通知和警告。可以通过调用<code>strictVars(true)</code> 或传递<code>strictVars</code>给构造器来设置。
            </para></listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.view.introduction.accessors">
        <title>实用访问器</title>

        <para>
            一般来说，你只需要调用<code>assign()</code>、<code>render()</code>或其中之一来设置/添加过滤器、助手类、和脚本路径。然而，如果希望扩展<code>Zend_View</code>或需要访问它的内部，有许多访问器（Accessor）可用：
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <code>getVars()</code> 将返回所有已赋值的变量。
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>clearVars()</code> 将清除所有已赋值的变量；当你想重新使用同一个视图对象，并决定哪些变量可用时，这个功能很有用。
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>getScriptPath($script)</code> 将获取指定的视图脚本的路径。
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>getScriptPaths()</code> 将获取所有注册的脚本路径。
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>getHelperPath($helper)</code> 将获取已命名的助手类的路径。
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>getHelperPaths()</code> 将获取所有注册的助手路径。
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>getFilterPath($filter)</code> 将获取已命名的过滤器类的路径。
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>getFilterPaths()</code> 将获取所有注册的过滤器文件的路径。
                </para>
            </listitem>
        </itemizedlist>
    </sect2>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
