Zend_Layout-QuickStart.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.layout.quickstart">
  5. <title>Guia Rápido Zend_Layout</title>
  6. <para>
  7. Há dois casos de uso primários para <classname>Zend_Layout</classname>: com o
  8. <acronym>MVC</acronym> do Zend Framework, e sem.
  9. </para>
  10. <sect2 id="zend.layout.quickstart.layouts">
  11. <title>Scripts de Layout</title>
  12. <para>
  13. Em ambos os casos, entretanto, você precisará criar um script de layout.
  14. Scripts de layout simplesmente utilizam <classname>Zend_View</classname> (ou
  15. qualquer outra implementação de view que você esteja usando). Variáveis de layout são
  16. registradas com um <link linkend="zend.view.helpers.initial.placeholder">marcador</link>
  17. <classname>Zend_Layout</classname>, e podem ser acessadas via helper de marcador
  18. ou buscando-as como propriedades de objeto do objeto layout via helper de layout.
  19. </para>
  20. <para>
  21. Como um exemplo:
  22. </para>
  23. <programlisting language="php"><![CDATA[
  24. <!DOCTYPE html
  25. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  26. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  27. <html>
  28. <head>
  29. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  30. <title>Meu Site</title>
  31. </head>
  32. <body>
  33. <?php
  34. // busca a chave 'content' usando um helper de layout:
  35. echo $this->layout()->content;
  36. // busca a chave 'foo' usando um helper marcador:
  37. echo $this->placeholder('Zend_Layout')->foo;
  38. // busca o objeto de layout e recupera várias chaves dele:
  39. $layout = $this->layout();
  40. echo $layout->bar;
  41. echo $layout->baz;
  42. ?>
  43. </body>
  44. </html>
  45. ]]></programlisting>
  46. <para>
  47. Como <classname>Zend_Layout</classname> utiliza <classname>Zend_View</classname> para
  48. renderização, Você pode também usar quaisquer helpers de view registradas, e também
  49. ter acesso a quaisquer variáveis de view associadas. Particularmente útil são os
  50. vários <link linkend="zend.view.helpers.initial.placeholder">helpers marcadores</link>,
  51. que permitem a você recuperar conteúdo para áreas tais como a seção &lt;head&gt;,
  52. navegação, etc.:
  53. </para>
  54. <programlisting language="php"><![CDATA[
  55. <!DOCTYPE html
  56. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  57. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  58. <html>
  59. <head>
  60. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  61. <?php echo $this->headTitle() ?>
  62. <?php echo $this->headScript() ?>
  63. <?php echo $this->headStyle() ?>
  64. </head>
  65. <body>
  66. <?php echo $this->render('header.phtml') ?>
  67. <div id="nav"><?php echo $this->placeholder('nav') ?></div>
  68. <div id="content"><?php echo $this->layout()->content ?></div>
  69. <?php echo $this->render('footer.phtml') ?>
  70. </body>
  71. </html>
  72. ]]></programlisting>
  73. </sect2>
  74. <sect2 id="zend.layout.quickstart.mvc">
  75. <title>Usando Zend_Layout com o MVC do Zend Framework</title>
  76. <para>
  77. <classname>Zend_Controller</classname> oferece um rico conjunto de funcionalidades
  78. para extensão por meio de seus <link
  79. linkend="zend.controller.plugins">front controller plugins</link> e <link
  80. linkend="zend.controller.actionhelpers">action controller helpers</link>.
  81. <classname>Zend_View</classname> também tem <link
  82. linkend="zend.view.helpers">helpers</link>. <classname>Zend_Layout</classname>
  83. toma vantagem desses diversos pontos de extensão quando usado com os
  84. componentes <acronym>MVC</acronym>.
  85. </para>
  86. <para>
  87. <methodname>Zend_Layout::startMvc()</methodname> cria uma instância de
  88. <classname>Zend_Layout</classname> com qualquer configuração opcional que
  89. você fornecer. Ele registra então um front controller plugin que renderiza o
  90. layout com qualquer conteúdo de aplicação uma vez que o laço de despacho foi feito,
  91. e registra um action helper para permitir o acesso ao objeto layout a partir de seus
  92. action controllers. Adicionalmente, você pode a qualquer tempo pegar a instância de
  93. dentro de um view script usando o view helper <classname>Layout</classname>.
  94. </para>
  95. <para>
  96. Primeiro, dê uma olhada em como inicializar <classname>Zend_Layout</classname>
  97. para uso com o <acronym>MVC</acronym>:
  98. </para>
  99. <programlisting language="php"><![CDATA[
  100. // Em seu bootstrap:
  101. Zend_Layout::startMvc();
  102. ]]></programlisting>
  103. <para>
  104. <methodname>startMvc()</methodname> pode tomar uma matriz opcional de opções ou
  105. um objeto <classname>Zend_Config</classname> para customizar a instância; essas
  106. opções são detalhadas <link linkend="zend.layout.options">nesta seção</link>.
  107. </para>
  108. <para>
  109. Em um action controller, você pode então acessar a instância de layout como um action
  110. helper:
  111. </para>
  112. <programlisting language="php"><![CDATA[
  113. class FooController extends Zend_Controller_Action
  114. {
  115. public function barAction()
  116. {
  117. // desabilita layouts para este action:
  118. $this->_helper->layout->disableLayout();
  119. }
  120. public function bazAction()
  121. {
  122. // usa um script de layout diferente com este action:
  123. $this->_helper->layout->setLayout('foobaz');
  124. };
  125. }
  126. ]]></programlisting>
  127. <para>
  128. Em seus view scripts, você pode então acessar o objeto de layout via view helper
  129. <classname>Layout</classname>. Esse view helper é levemente diferente dos outros
  130. no que toca a não tomar argumentos, e retornar um objeto ao invés de um valor
  131. string. Isso permite que você imediatamente chame métodos no objeto de layout:
  132. </para>
  133. <programlisting language="php"><![CDATA[
  134. <?php $this->layout()->setLayout('foo'); // configura layout alternativo ?>
  135. ]]></programlisting>
  136. <para>
  137. A qualquer tempo, você pode buscar a instância de <classname>Zend_Layout</classname>
  138. registrada com <acronym>MVC</acronym> via método estático
  139. <methodname>getMvcInstance()</methodname>:
  140. </para>
  141. <programlisting language="php"><![CDATA[
  142. // Retorna null se startMvc() não foi o primeiro a ser chamado
  143. $layout = Zend_Layout::getMvcInstance();
  144. ]]></programlisting>
  145. <para>
  146. Finalmente, o front controller plugin de <classname>Zend_Layout</classname> tem
  147. uma importante característica em adição a renderização do layout: ele recupera
  148. todos os segmentos nomeados do objeto de resposta e associa variáveis,
  149. associando o segmento 'default' a variável 'content'. Isso permite a você acessar
  150. o conteúdo de sua aplicação e renderizá-lo em seus view scripts.
  151. </para>
  152. <para>
  153. Como um exemplo, diremos que seu código primeiro ativa
  154. <methodname>FooController::indexAction()</methodname>, que renderiza algum
  155. conteúdo para o segmento de resposta padrão, e então prossegue para
  156. <methodname>NavController::menuAction()</methodname>, que renderiza conteúdo
  157. para o segmento de resposta 'nav'. Finalmente, você prossegue para
  158. <methodname>CommentController::fetchAction()</methodname> e busca alguns comentários,
  159. mas renderizar isso para o segmento de resposta é bom (o que adiciona conteúdo
  160. aquele segmento). Seu view script poderia então renderizar cada um separadamente:
  161. </para>
  162. <programlisting language="php"><![CDATA[
  163. <body>
  164. <!-- renders /nav/menu -->
  165. <div id="nav"><?php echo $this->layout()->nav ?></div>
  166. <!-- renders /foo/index + /comment/fetch -->
  167. <div id="content"><?php echo $this->layout()->content ?></div>
  168. </body>
  169. ]]></programlisting>
  170. <para>
  171. Essa característica é particularmente útil quando usada em conjunção com o
  172. <link linkend="zend.controller.actionhelpers.actionstack">action helper</link> e
  173. <link linkend="zend.controller.plugins.standard.actionstack">plugin</link>
  174. ActionStack, o qual você pode usar para configurar uma pilha de ações através da
  175. qual itertamos, e então criamos páginas widgetizadas.
  176. </para>
  177. </sect2>
  178. <sect2 id="zend.layout.quickstart.standalone">
  179. <title>Usando Zend_Layout como um Componente</title>
  180. <para>
  181. Como um componente autônomo, <classname>Zend_Layout</classname> não oferece tantas
  182. características ou tanta conveniência como quanto é usado com o
  183. <acronym>MVC</acronym>. Entretanto, ele ainda tem dois benefícios a destacar:
  184. </para>
  185. <itemizedlist>
  186. <listitem>
  187. <para>
  188. Escopo de variáveis de layout.
  189. </para>
  190. </listitem>
  191. <listitem>
  192. <para>
  193. Isolamento do view script de layout de outros scripts view.
  194. </para>
  195. </listitem>
  196. </itemizedlist>
  197. <para>
  198. Quando usado como um componente autônomo, simplesmente inicie o objeto layout,
  199. use os vários acessores para configurar estado, configure variáveis como
  200. propriedades de objeto, e renderize o layout:
  201. </para>
  202. <programlisting language="php"><![CDATA[
  203. $layout = new Zend_Layout();
  204. // Configura um caminho de script de layout:
  205. $layout->setLayoutPath('/path/to/layouts');
  206. // Configura algumas variáveis:
  207. $layout->content = $content;
  208. $layout->nav = $nav;
  209. // Escolhe um script de layout diferente:
  210. $layout->setLayout('foo');
  211. // Renderiza o layout final
  212. echo $layout->render();
  213. ]]></programlisting>
  214. </sect2>
  215. <sect2 id="zend.layout.quickstart.example">
  216. <title>Exemplo de Layout</title>
  217. <para>
  218. Algumas vezes uma imagem vale mais que mil palavras. A seguir temos
  219. um exemplo de um script de layout.
  220. </para>
  221. <para>
  222. <inlinegraphic align="center" valign="middle"
  223. fileref="figures/zend.layout.quickstart.example.png" format="PNG" />
  224. </para>
  225. <para>
  226. A ordem real dos elementos pode variar, dependendo do <acronym>CSS</acronym> que
  227. você tenha configurado; por exemplo, se você está usando posicionamento absoluto,
  228. você pode ser capaz de ter a navegação exibida mais tarde no documento, mas ainda
  229. mostrar-se no topo; o mesmo poderia ser dito para a barra lateral ou o cabeçalho.
  230. A mecânica real de puxar o conteúdo permanece a mesma, entretanto.
  231. </para>
  232. </sect2>
  233. </sect1>
  234. <!--
  235. vim:se ts=4 sw=4 et:
  236. -->