Zend_View-Helpers-Placeholder.xml 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <sect3 id="zend.view.helpers.initial.placeholder">
  2. <title> 占位符助手(Placeholder Helper) </title>
  3. <para>
  4. <code>Placeholder</code> 视图助手用来在视图脚本和视图实例之间持久化内容。它也提供一些有用的功能如:聚合内容、抓取视图脚本内容以后来用和添加前置(pre-)和后置(post-)文本到内容 (还可以为聚合内容定制分隔符等)。
  5. </para>
  6. <example id="zend.view.helpers.initial.placeholder.usage">
  7. <title> 占位符的基本用法 </title>
  8. <para>
  9. 占位符的基本用法是将视图中的数据持久化。每个<code>Placeholder</code>助手的启用都需要一个占位符名称,助手接着返回一个占位符容器对象,你可以用来处理或者简单地输出。
  10. </para>
  11. <programlisting role="php"><![CDATA[
  12. <?php $this->placeholder('foo')->set("Some text for later") ?>
  13. <?php
  14. echo $this->placeholder('foo');
  15. // outputs "Some text for later"
  16. ?>
  17. ]]></programlisting>
  18. </example>
  19. <example id="zend.view.helpers.initial.placeholder.aggregation">
  20. <title> 用占位符来聚合内容 </title>
  21. <para>
  22. 通过占位符来聚合内容有时候很有用。例如视图脚本可拥有一个变量数组来存放数据,而视图脚本可以决定这些数据如何显示出来。
  23. </para>
  24. <para>
  25. <code>Placeholder</code> 视图助手使用继承自 <code>ArrayObject</code> 的容器,为处理数组提供了丰富的功能。另外,它为格式化存储在容器里的内容提供了众多的方法:
  26. </para>
  27. <itemizedlist>
  28. <listitem><para>
  29. <code>setPrefix($prefix)</code> 用内容的前缀设置文本。任何时候使用 <code>getPrefix()</code> 来确定当前的设置是什么。
  30. </para></listitem>
  31. <listitem><para>
  32. <code>setPostfix($prefix)</code> 用要追加的内容设置文本。任何时候使用 <code>getPostfix()</code> 来确定当前的设置是什么。
  33. </para></listitem>
  34. <listitem><para>
  35. <code>setSeparator($prefix)</code> 设置用来分隔聚合内容的分隔符。任何时候使用 <code>getSeparator()</code> 来确定当前的设置是什么。
  36. </para></listitem>
  37. <listitem><para>
  38. <code>setIndent($prefix)</code> 可以用来给内容设置一个缩进的值。如果传递一个整数,就按这个数量来缩进;如果传递一个字符串,就按字符串的长度来缩进。任何时候使用 <code>getIndent()</code> 来确定当前的设置是什么。
  39. </para></listitem>
  40. </itemizedlist>
  41. <programlisting role="php"><![CDATA[
  42. <!-- first view script -->
  43. <?php $this->placeholder('foo')->exchangeArray($this->data) ?>
  44. ]]></programlisting>
  45. <programlisting role="php"><![CDATA[
  46. <!-- later view script -->
  47. <?php
  48. $this->placeholder('foo')->setPrefix("<ul>\n <li>")
  49. ->setSeparator("</li><li>\n")
  50. ->setIndent(4)
  51. ->setPostfix("</li></ul>\n");
  52. ?>
  53. <?php
  54. echo $this->placeholder('foo');
  55. //输出一个带有漂亮缩进的HTML无序列表
  56. ?>
  57. ]]></programlisting>
  58. <para>
  59. 因为 <code>Placeholder</code> 容器对象从 <code>ArrayObject</code> 继承而来,所以你可以很容易地给特定的键赋值,而不是简单地把它压进容器。键可以作为对象属性或数组键来访问。
  60. </para>
  61. <programlisting role="php"><![CDATA[
  62. <?php $this->placeholder('foo')->bar = $this->data ?>
  63. <?php echo $this->placeholder('foo')->bar ?>
  64. <?php
  65. $foo = $this->placeholder('foo');
  66. echo $foo['bar'];
  67. ?>
  68. ]]></programlisting>
  69. </example>
  70. <example id="zend.view.helpers.initial.placeholder.capture">
  71. <title> 使用占位符(Placeholders)来抓取内容 </title>
  72. <para>
  73. 有时你可能会在视图脚本(最容易的模板)为占位符放些内容,<code>Placeholder</code> 视图助手允许你抓取任意的内容,在以后用下列的 API 来解析并输出(本功能类似于缓冲输出--Haohappy注):
  74. </para>
  75. <itemizedlist>
  76. <listitem>
  77. <para>
  78. <code>captureStart($type, $key)</code> 开始抓取内容。
  79. </para>
  80. <para>
  81. <code>$type</code> 应该是 <code>Placeholder</code> 的常量 <code>APPEND</code> 或 <code>SET</code> 其中之一。如果用 <code>APPEND</code>,被抓取得内容就追加到在占位符当前内容的列表; 如果用 <code>SET</code>,被抓取得内容就被用作占位符的唯一内容(替换以前的内容)。缺省地 <code>$type</code> 是 <code>APPEND</code>。
  82. </para>
  83. <para>
  84. <code>$key</code>可用来在占位符容器指定一个特殊的键给你想抓取的内容。
  85. </para>
  86. <para>
  87. <code>captureStart()</code> 锁住抓取直到 <code>captureEnd()</code> 被调用,不能在同一个占位符容器里嵌套抓取,这样做会引起一个异常。
  88. </para>
  89. </listitem>
  90. <listitem><para>
  91. <code>captureEnd()</code> 使抓取内容停止,并根据 <code>captureStart()</code> 如何被调用来把它放到容器对象。
  92. </para></listitem>
  93. </itemizedlist>
  94. <programlisting role="php"><![CDATA[
  95. <!-- Default capture: append -->
  96. <?php $this->placeholder('foo')->captureStart();
  97. foreach ($this->data as $datum): ?>
  98. <div class="foo">
  99. <h2><?= $datum->title ?></h2>
  100. <p><?= $datum->content ?></p>
  101. </div>
  102. <?php endforeach; ?>
  103. <?php $this->placeholder('foo')->captureEnd() ?>
  104. <?php echo $this->placeholder('foo') ?>
  105. ]]></programlisting>
  106. <programlisting role="php"><![CDATA[
  107. <!-- Capture to key -->
  108. <?php $this->placeholder('foo')->captureStart('SET', 'data');
  109. foreach ($this->data as $datum): ?>
  110. <div class="foo">
  111. <h2><?= $datum->title ?></h2>
  112. <p><?= $datum->content ?></p>
  113. </div>
  114. <?php endforeach; ?>
  115. <?php $this->placeholder('foo')->captureEnd() ?>
  116. <?php echo $this->placeholder('foo')->data ?>
  117. ]]></programlisting>
  118. </example>
  119. <sect4 id="zend.view.helpers.initial.placeholder.implementations">
  120. <title> 具体占位符实现 </title>
  121. <para>
  122. Zend Framework 自带有若干个具体实现的占位符,包括常用的占位符:doctype、page title、以及各种 &lt;head&gt; 元素。对所有情况,不带参数调用占位符将返回元素自己。
  123. </para>
  124. <para>
  125. 每个元素的文档,请查看如下链接:
  126. </para>
  127. <itemizedlist>
  128. <listitem><para>
  129. <link linkend="zend.view.helpers.initial.doctype">Doctype</link>
  130. </para></listitem>
  131. <listitem><para>
  132. <link linkend="zend.view.helpers.initial.headlink">HeadLink</link>
  133. </para></listitem>
  134. <listitem><para>
  135. <link linkend="zend.view.helpers.initial.headmeta">HeadMeta</link>
  136. </para></listitem>
  137. <listitem><para>
  138. <link linkend="zend.view.helpers.initial.headscript">HeadScript</link>
  139. </para></listitem>
  140. <listitem><para>
  141. <link linkend="zend.view.helpers.initial.headstyle">HeadStyle</link>
  142. </para></listitem>
  143. <listitem><para>
  144. <link linkend="zend.view.helpers.initial.headtitle">HeadTitle</link>
  145. </para></listitem>
  146. <listitem><para>
  147. <link linkend="zend.view.helpers.initial.inlinescript">InlineScript</link>
  148. </para></listitem>
  149. </itemizedlist>
  150. </sect4>
  151. </sect3>
  152. <!--
  153. vim:se ts=4 sw=4 et:
  154. -->