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