layout-usage.xml 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24362 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.layout.usage">
  5. <title>Usando Zend_Layout</title>
  6. <para>
  7. O uso básico do <classname>Zend_Layout</classname> é bastante trivial. Assumindo que você já
  8. está usando <classname>Zend_Application</classname>, você pode simplesmente fornecer algumas
  9. opções de configuração e criar um script de vizualização para o layout.
  10. </para>
  11. <sect2 id="learning.layout.usage.configuration">
  12. <title>Configuração do Layout</title>
  13. <para>
  14. A localização recomendada dos layouts é no subdiretório
  15. "<filename>layouts/scripts/</filename>" de sua aplicação:
  16. </para>
  17. <programlisting language="text"><![CDATA[
  18. application
  19. |-- Bootstrap.php
  20. |-- configs
  21. | `-- application.ini
  22. |-- controllers
  23. |-- layouts
  24. | `-- scripts
  25. | |-- layout.phtml
  26. ]]></programlisting>
  27. <para>
  28. Para inicializar o <classname>Zend_Layout</classname>, adicione o seguinte no seu
  29. arquivo de configuração ("<filename>application/configs/application.ini</filename>"):
  30. </para>
  31. <programlisting language="dosini"><![CDATA[
  32. resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
  33. resources.layout.layout = "layout"
  34. ]]></programlisting>
  35. <para>
  36. A primeira linha indica onde procurar pelos scripts de layout; a segunda linha dá o
  37. nome do layout a ser usado, menos a extensão do script de vizualização (que é assumida
  38. como "<filename>.phtml</filename>" por padrão).
  39. </para>
  40. </sect2>
  41. <sect2 id="learning.layout.usage.layout-script">
  42. <title>Criando um Script de Layout</title>
  43. <para>
  44. Agora que você tem suas configurações no lugar, você precisa criar seu script de layout.
  45. Primeiro tenha certeza de que você criou o diretório
  46. "<filename>application/layouts/scripts</filename>"; depois abra um editor e crie as
  47. marcações para o seu layout. Scripts de layout são simplesmente scripts de vizualização,
  48. com algumas pequenas diferenças.
  49. </para>
  50. <programlisting language="php"><![CDATA[
  51. <html>
  52. <head>
  53. <title>Meu Site</title>
  54. </head>
  55. <body>
  56. <?php echo $this->layout()->content ?>
  57. </body>
  58. </html>
  59. ]]></programlisting>
  60. <para>
  61. No exemplo acima, você notará a chamada de um assitente de vizualização
  62. <methodname>layout()</methodname>. Quando você registra o recurso
  63. <classname>Zend_Layout</classname>, você também ganha acesso a uma ação e ao assistente
  64. de vizualização que permitem a você acesso à instância
  65. <classname>Zend_Layout</classname>; você pode então chamar operações no objeto layout.
  66. Neste caso, nós estamos recuperando uma variável chamada <varname>$content</varname>, e
  67. imprimindo ela. Por padrão, a variável <varname>$content</varname> é populada por você
  68. pelo script de vizualização da aplicação renderizado. Por outro lado, nada que você
  69. normalmente faça em um script de vizualização é perfeitamente válido -- chamar quaisquer
  70. assistentes ou métodos de vizualização que você desejar.
  71. </para>
  72. <para>
  73. Neste ponto, você tem um script de vizualização funcionando e sua aplicação é informada
  74. de sua localização e sabe como renderizá-lo.
  75. </para>
  76. </sect2>
  77. <sect2 id="learning.layout.usage.access">
  78. <title>Acessando o Objeto Layout</title>
  79. <para>
  80. De vez em quando, você pode precisar de acesso direto ao objeto layout. Há três modos de
  81. fazer isso:
  82. </para>
  83. <itemizedlist>
  84. <listitem>
  85. <para>
  86. <emphasis>Dentro dos scripts de vizualização:</emphasis> use o assistente de
  87. vizualização <methodname>layout()</methodname>, que retorna a instância
  88. <classname>Zend_Layout</classname> registrada com o plugin controlador frontal.
  89. </para>
  90. <programlisting language="php"><![CDATA[
  91. <?php $layout = $this->layout(); ?>
  92. ]]></programlisting>
  93. <para>
  94. Uma vez que retornar a instância layout, você pode também simplesmente chamar os
  95. métodos nele, ao invés de atribuir ela a uma variável.
  96. </para>
  97. </listitem>
  98. <listitem>
  99. <para>
  100. <emphasis>Dentro dos controladores de ação:</emphasis> use o assitente de
  101. ação <methodname>layout()</methodname>, que atua apenas como um
  102. assistente de vizualização.
  103. </para>
  104. <programlisting language="php"><![CDATA[
  105. // Chamando assistente como um método de corretor de ajuda.
  106. $layout = $this->_helper->layout();
  107. // Ou, mais detalhadamente:
  108. $helper = $this->_helper->getHelper('Layout');
  109. $layout = $helper->getLayoutInstance();
  110. ]]></programlisting>
  111. <para>
  112. Assim como no assitente de vizualização, desde que o assistente de ação retorne
  113. a instância layout, você pode também simplesmente chamar métodos nele, ao invés
  114. de atribuir a ele variáveis.
  115. </para>
  116. </listitem>
  117. <listitem>
  118. <para>
  119. <emphasis>Em outro lugar: </emphasis> use o método estático
  120. <methodname>getMvcInstance()</methodname>. Isso retornará a instância layout
  121. registrada pelo recurso de inicialização da aplicação.
  122. </para>
  123. <programlisting language="php"><![CDATA[
  124. $layout = Zend_Layout::getMvcInstance();
  125. ]]></programlisting>
  126. </listitem>
  127. <listitem>
  128. <para>
  129. <emphasis>Via inicialização da aplicação:</emphasis> recupera o recurso layout,
  130. que será a instância <classname>Zend_Layout</classname>.
  131. </para>
  132. <programlisting language="php"><![CDATA[
  133. $layout = $bootstrap->getResource('Layout');
  134. ]]></programlisting>
  135. <para>
  136. Em qualquer lugar que você tenha acesso ao objeto inicialização da aplicação,
  137. neste método é preferível usar o método estático
  138. <methodname>getMvcInstance()</methodname>.
  139. </para>
  140. </listitem>
  141. </itemizedlist>
  142. </sect2>
  143. <sect2 id="learning.layout.usage.other-operations">
  144. <title>Outras Operações</title>
  145. <para>
  146. Na maioria dos casos, a configuração acmia e o script layout (com modificações) lhe
  147. darão o que você precisa. Porém, existe algumas outras funcionalidades que você
  148. provavelmente vai usar mais cedo ou mais tarde. Nos exemplos seguintes, você pode usar
  149. um dos <link linkend="learning.layout.usage.access">métodos listados acima</link> para
  150. recuperar o objeto layout.
  151. </para>
  152. <itemizedlist>
  153. <listitem>
  154. <para>
  155. <emphasis>Configurando vairáveis layout</emphasis>.
  156. O <classname>Zend_Layout</classname> mantém o seu próprio registro das variáveis
  157. de visualização específicas de layout que você pode acessar; a chave
  158. <varname>$content</varname> observada no exemplo de script de layout inicial é
  159. um exemplo. Você pode atribuir e recuperá-las usando acesso normal, ou via
  160. método <methodname>assign()</methodname>.
  161. </para>
  162. <programlisting language="php"><![CDATA[
  163. // Configuração de conteúdo:
  164. $layout->somekey = "foo"
  165. // Imprimindo esse mesmo conteúdo:
  166. echo $layout->somekey; // 'foo'
  167. // Usando o método assign():
  168. $layout->assign('someotherkey', 'bar');
  169. // Acesso às variáveis assign()'d permanece o mesmo:
  170. echo $layout->someotherkey; // 'bar'
  171. ]]></programlisting>
  172. </listitem>
  173. <listitem>
  174. <para>
  175. <methodname>disableLayout()</methodname>. Ocasionalmente, você pode querer
  176. desabilitar layouts; por exemplo, quando responder um pedido Ajax, ou fornecer
  177. uma representação RESTful de um recurso. Nesses casos, você pode chamar o método
  178. <methodname>disableLayout()</methodname> no seu objeto layout.
  179. </para>
  180. <programlisting language="php"><![CDATA[
  181. $layout->disableLayout();
  182. ]]></programlisting>
  183. <para>
  184. O contrário deste método é, claro, o <methodname>enableLayout()</methodname>,
  185. que pode ser chamado a qualquer hora para reabilitar layouts para a ação
  186. solicitada.
  187. </para>
  188. </listitem>
  189. <listitem>
  190. <para>
  191. <emphasis>Selecionando um layout alternativo</emphasis>: se você possui layouts
  192. múltiplos para o seu site ou aplicação, você pode selecionar o layout a ser
  193. usado a qualquer hora simplesmente chamando o método
  194. <methodname>setLayout()</methodname>. Chame ele especificando o nome do script
  195. de layout sem o sufixo do arquivo.
  196. </para>
  197. <programlisting language="php"><![CDATA[
  198. // Use o script de layout "alternate.phtml":
  199. $layout->setLayout('alternate');
  200. ]]></programlisting>
  201. <para>
  202. O script de layout deve encontrar-se no diretório <varname>$layoutPath</varname>
  203. especificado nas suas configurações. O <classname>Zend_Layout</classname> irá
  204. então usar esse novo layout quando renderizar.
  205. </para>
  206. </listitem>
  207. </itemizedlist>
  208. </sect2>
  209. </sect1>