| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <sect3 id="zend.view.helpers.initial.placeholder">
- <title> 占位符助手(Placeholder Helper) </title>
- <para>
- <code>Placeholder</code> 视图助手用来在视图脚本和视图实例之间持久化内容。它也提供一些有用的功能如:聚合内容、抓取视图脚本内容以后来用和添加前置(pre-)和后置(post-)文本到内容 (还可以为聚合内容定制分隔符等)。
- </para>
- <example id="zend.view.helpers.initial.placeholder.usage">
- <title> 占位符的基本用法 </title>
- <para>
- 占位符的基本用法是将视图中的数据持久化。每个<code>Placeholder</code>助手的启用都需要一个占位符名称,助手接着返回一个占位符容器对象,你可以用来处理或者简单地输出。
- </para>
- <programlisting role="php"><![CDATA[
- <?php $this->placeholder('foo')->set("Some text for later") ?>
- <?php
- echo $this->placeholder('foo');
- // outputs "Some text for later"
- ?>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.placeholder.aggregation">
- <title> 用占位符来聚合内容 </title>
- <para>
- 通过占位符来聚合内容有时候很有用。例如视图脚本可拥有一个变量数组来存放数据,而视图脚本可以决定这些数据如何显示出来。
- </para>
- <para>
- <code>Placeholder</code> 视图助手使用继承自 <code>ArrayObject</code> 的容器,为处理数组提供了丰富的功能。另外,它为格式化存储在容器里的内容提供了众多的方法:
- </para>
- <itemizedlist>
- <listitem><para>
- <code>setPrefix($prefix)</code> 用内容的前缀设置文本。任何时候使用 <code>getPrefix()</code> 来确定当前的设置是什么。
- </para></listitem>
- <listitem><para>
- <code>setPostfix($prefix)</code> 用要追加的内容设置文本。任何时候使用 <code>getPostfix()</code> 来确定当前的设置是什么。
- </para></listitem>
- <listitem><para>
- <code>setSeparator($prefix)</code> 设置用来分隔聚合内容的分隔符。任何时候使用 <code>getSeparator()</code> 来确定当前的设置是什么。
- </para></listitem>
- <listitem><para>
- <code>setIndent($prefix)</code> 可以用来给内容设置一个缩进的值。如果传递一个整数,就按这个数量来缩进;如果传递一个字符串,就按字符串的长度来缩进。任何时候使用 <code>getIndent()</code> 来确定当前的设置是什么。
- </para></listitem>
- </itemizedlist>
- <programlisting role="php"><![CDATA[
- <!-- first view script -->
- <?php $this->placeholder('foo')->exchangeArray($this->data) ?>
- ]]></programlisting>
- <programlisting role="php"><![CDATA[
- <!-- later view script -->
- <?php
- $this->placeholder('foo')->setPrefix("<ul>\n <li>")
- ->setSeparator("</li><li>\n")
- ->setIndent(4)
- ->setPostfix("</li></ul>\n");
- ?>
- <?php
- echo $this->placeholder('foo');
- //输出一个带有漂亮缩进的HTML无序列表
- ?>
- ]]></programlisting>
- <para>
- 因为 <code>Placeholder</code> 容器对象从 <code>ArrayObject</code> 继承而来,所以你可以很容易地给特定的键赋值,而不是简单地把它压进容器。键可以作为对象属性或数组键来访问。
- </para>
- <programlisting role="php"><![CDATA[
- <?php $this->placeholder('foo')->bar = $this->data ?>
- <?php echo $this->placeholder('foo')->bar ?>
- <?php
- $foo = $this->placeholder('foo');
- echo $foo['bar'];
- ?>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.placeholder.capture">
- <title> 使用占位符(Placeholders)来抓取内容 </title>
- <para>
- 有时你可能会在视图脚本(最容易的模板)为占位符放些内容,<code>Placeholder</code> 视图助手允许你抓取任意的内容,在以后用下列的 API 来解析并输出(本功能类似于缓冲输出--Haohappy注):
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <code>captureStart($type, $key)</code> 开始抓取内容。
- </para>
- <para>
- <code>$type</code> 应该是 <code>Placeholder</code> 的常量 <code>APPEND</code> 或 <code>SET</code> 其中之一。如果用 <code>APPEND</code>,被抓取得内容就追加到在占位符当前内容的列表; 如果用 <code>SET</code>,被抓取得内容就被用作占位符的唯一内容(替换以前的内容)。缺省地 <code>$type</code> 是 <code>APPEND</code>。
- </para>
- <para>
- <code>$key</code>可用来在占位符容器指定一个特殊的键给你想抓取的内容。
- </para>
- <para>
- <code>captureStart()</code> 锁住抓取直到 <code>captureEnd()</code> 被调用,不能在同一个占位符容器里嵌套抓取,这样做会引起一个异常。
- </para>
- </listitem>
- <listitem><para>
- <code>captureEnd()</code> 使抓取内容停止,并根据 <code>captureStart()</code> 如何被调用来把它放到容器对象。
- </para></listitem>
- </itemizedlist>
- <programlisting role="php"><![CDATA[
- <!-- Default capture: append -->
- <?php $this->placeholder('foo')->captureStart();
- foreach ($this->data as $datum): ?>
- <div class="foo">
- <h2><?= $datum->title ?></h2>
- <p><?= $datum->content ?></p>
- </div>
- <?php endforeach; ?>
- <?php $this->placeholder('foo')->captureEnd() ?>
- <?php echo $this->placeholder('foo') ?>
- ]]></programlisting>
- <programlisting role="php"><![CDATA[
- <!-- Capture to key -->
- <?php $this->placeholder('foo')->captureStart('SET', 'data');
- foreach ($this->data as $datum): ?>
- <div class="foo">
- <h2><?= $datum->title ?></h2>
- <p><?= $datum->content ?></p>
- </div>
- <?php endforeach; ?>
- <?php $this->placeholder('foo')->captureEnd() ?>
- <?php echo $this->placeholder('foo')->data ?>
- ]]></programlisting>
- </example>
- <sect4 id="zend.view.helpers.initial.placeholder.implementations">
- <title> 具体占位符实现 </title>
- <para>
- Zend Framework 自带有若干个具体实现的占位符,包括常用的占位符:doctype、page title、以及各种 <head> 元素。对所有情况,不带参数调用占位符将返回元素自己。
- </para>
- <para>
- 每个元素的文档,请查看如下链接:
- </para>
- <itemizedlist>
- <listitem><para>
- <link linkend="zend.view.helpers.initial.doctype">Doctype</link>
- </para></listitem>
- <listitem><para>
- <link linkend="zend.view.helpers.initial.headlink">HeadLink</link>
- </para></listitem>
- <listitem><para>
- <link linkend="zend.view.helpers.initial.headmeta">HeadMeta</link>
- </para></listitem>
- <listitem><para>
- <link linkend="zend.view.helpers.initial.headscript">HeadScript</link>
- </para></listitem>
- <listitem><para>
- <link linkend="zend.view.helpers.initial.headstyle">HeadStyle</link>
- </para></listitem>
- <listitem><para>
- <link linkend="zend.view.helpers.initial.headtitle">HeadTitle</link>
- </para></listitem>
- <listitem><para>
- <link linkend="zend.view.helpers.initial.inlinescript">InlineScript</link>
- </para></listitem>
- </itemizedlist>
- </sect4>
- </sect3>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|