Usando Zend_Layout

O uso básico do Zend_Layout é bastante trivial. Assumindo que você já está usando Zend_Application, você pode simplesmente fornecer algumas opções de configuração e criar um script de vizualização para o layout.

Configuração do Layout

A localização recomendada dos layouts é no subdiretório "layouts/scripts/" de sua aplicação:

application
|-- Bootstrap.php
|-- configs
|   `-- application.ini
|-- controllers
|-- layouts
|   `-- scripts
|       |-- layout.phtml

Para inicializar o Zend_Layout, adicione o seguinte no seu arquivo de configuração ("application/configs/application.ini"):

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.layout.layout = "layout"

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 ".phtml" por padrão).

Criando um Script de Layout

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 "application/layouts/scripts"; 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.

<html>
<head>
    <title>Meu Site</title>
</head>
<body>
    <?php echo $this->layout()->content ?>
</body>
</html>

No exemplo acima, você notará a chamada de um assitente de vizualização layout(). Quando você registra o recurso Zend_Layout, você também ganha acesso a uma ação e ao assistente de vizualização que permitem a você acesso à instância Zend_Layout; você pode então chamar operações no objeto layout. Neste caso, nós estamos recuperando uma variável chamada $content, e imprimindo ela. Por padrão, a variável $content é 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.

Neste ponto, você tem um script de vizualização funcionando e sua aplicação é informada de sua localização e sabe como renderizá-lo.

Acessando o Objeto Layout

De vez em quando, você pode precisar de acesso direto ao objeto layout. Há três modos de fazer isso:

  • Dentro dos scripts de vizualização: use o assistente de vizualização layout(), que retorna a instância Zend_Layout registrada com o plugin controlador frontal.

    <?php $layout = $this->layout(); ?>
    

    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.

  • Dentro dos controladores de ação: use o assitente de ação layout(), que atua apenas como um assistente de vizualização.

    // 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();
    

    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.

  • Em outro lugar: use o método estático getMvcInstance(). Isso retornará a instância layout registrada pelo recurso de inicialização da aplicação.

    $layout = Zend_Layout::getMvcInstance();
    
  • Via inicialização da aplicação: recupera o recurso layout, que será a instância Zend_Layout.

    $layout = $bootstrap->getResource('Layout');
    

    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 getMvcInstance().

Outras Operações

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 métodos listados acima para recuperar o objeto layout.

  • Configurando vairáveis layout. O Zend_Layout mantém o seu próprio registro das variáveis de visualização específicas de layout que você pode acessar; a chave $content observada no exemplo de script de layout inicial é um exemplo. Você pode atribuir e recuperá-las usando acesso normal, ou via método assign().

    // 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'
    
  • disableLayout(). 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 disableLayout() no seu objeto layout.

    $layout->disableLayout();
    

    O contrário deste método é, claro, o enableLayout(), que pode ser chamado a qualquer hora para reabilitar layouts para a ação solicitada.

  • Selecionando um layout alternativo: 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 setLayout(). Chame ele especificando o nome do script de layout sem o sufixo do arquivo.

    // Use o script de layout "alternate.phtml":
    $layout->setLayout('alternate');
    

    O script de layout deve encontrar-se no diretório $layoutPath especificado nas suas configurações. O Zend_Layout irá então usar esse novo layout quando renderizar.