El uso básico de Zend_Layout es bastante trivial. Suponiendo que ya
estés usando Zend_Application, simplemente puedes proporcionar algunas
opciones de configuración y crear un script de vista de layout.
La ubicación recomendada para los layouts es un subdirectorio "layouts/scripts/"
de tu aplicación:
application |-- Bootstrap.php |-- configs | `-- application.ini |-- controllers |-- layouts | `-- scripts | |-- layout.phtml
Para inicializar Zend_Layout, añade lo siguiente a tu
archivo de configuración ("application/configs/application.ini"):
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" resources.layout.layout = "layout"
La primera línea indica dónde buscar los scripts de layout; la segunda línea indica el
nombre del layout a usar, sin la extensión del script de vista (que se asume que es
".phtml" por defecto).
Ahora que tienes tu configuración en su lugar, necesitas crear tu script de layout.
Primero, asegúrate de haber creado el directorio
"application/layouts/scripts"; luego,
abre un editor y crea el marcado para tu layout. Los scripts de layout son simplemente scripts
de vista, con algunas ligeras diferencias.
<html>
<head>
<title>My Site</title>
</head>
<body>
<?php echo $this->layout()->content ?>
</body>
</html>
En el ejemplo anterior, notarás la llamada a un helper de vista layout().
Cuando registras el recurso Zend_Layout, también obtienes
acceso tanto a un helper de acción como a un helper de vista que te permiten acceder a la
instancia de Zend_Layout; luego puedes llamar operaciones sobre el objeto
layout. En este caso, estamos recuperando una variable con nombre, $content,
y mostrándola. Por defecto, la variable $content se rellena
automáticamente a partir del script de vista de la aplicación renderizado. Por lo demás, cualquier cosa que normalmente harías
en un script de vista es perfectamente válida: llama a cualquier helper o método de vista que desees.
Llegados a este punto, tienes un script de layout funcionando, y tu aplicación está informada de su ubicación y sabe que debe renderizarlo.
En ocasiones, puede que necesites acceso directo al objeto layout. Hay tres formas de hacer esto:
-
Dentro de scripts de vista: usa el helper de vista
layout(), que devuelve la instancia deZend_Layoutregistrada con el plugin del controlador frontal.<?php $layout = $this->layout(); ?>
Dado que devuelve la instancia del layout, también puedes simplemente llamar métodos sobre ella, en lugar de asignarla a una variable.
-
Dentro de controladores de acción: usa el helper de acción
layout(), que actúa igual que el helper de vista.// Calling helper as a method of the helper broker: $layout = $this->_helper->layout(); // Or, more verbosely: $helper = $this->_helper->getHelper('Layout'); $layout = $helper->getLayoutInstance();Al igual que con el helper de vista, dado que el helper de acción devuelve la instancia del layout, también puedes simplemente llamar métodos sobre ella, en lugar de asignarla a una variable.
-
En cualquier otro lugar: usa el método estático
getMvcInstance(). Esto devolverá la instancia del layout registrada por el recurso de bootstrap.$layout = Zend_Layout::getMvcInstance();
-
A través del bootstrap: recupera el recurso de layout, que será la instancia de
Zend_Layout.$layout = $bootstrap->getResource('Layout');Siempre que tengas acceso al objeto bootstrap, este método es preferible frente a usar el método estático
getMvcInstance().
En la mayoría de los casos, la configuración anterior y el script de layout (con modificaciones) te darán lo que necesitas. Sin embargo, existe otra funcionalidad que probablemente usarás tarde o temprano. En todos los siguientes ejemplos, puedes usar uno de los métodos listados anteriormente para recuperar el objeto layout.
-
Establecer variables de layout.
Zend_Layoutmantiene su propio registro de variables de vista específicas del layout a las que puedes acceder; la clave$contentmencionada en el ejemplo inicial de script de layout es un ejemplo de ello. Puedes asignar y recuperar estas usando el acceso normal a propiedades, o mediante el métodoassign().// Setting content: $layout->somekey = "foo" // Echoing that same content: echo $layout->somekey; // 'foo' // Using the assign() method: $layout->assign('someotherkey', 'bar'); // Access to assign()'d variables remains the same: echo $layout->someotherkey; // 'bar' -
disableLayout(). Ocasionalmente, puede que quieras deshabilitar los layouts; por ejemplo, al responder a una petición Ajax, o al proporcionar una representación RESTful de un recurso. En estos casos, puedes llamar al métododisableLayout()sobre tu objeto layout.$layout->disableLayout();
El opuesto de este método es, por supuesto,
enableLayout(), que se puede llamar en cualquier momento para volver a habilitar los layouts para la acción solicitada. -
Seleccionar un layout alternativo: Si tienes múltiples layouts para tu sitio o aplicación, puedes seleccionar el layout a usar en cualquier momento simplemente llamando al método
setLayout(). Llámalo especificando el nombre del script de layout sin el sufijo del archivo.// Use the layout script "alternate.phtml": $layout->setLayout('alternate');El script de layout debe residir en el directorio
$layoutPathespecificado en tu configuración.Zend_Layoutentonces usará este nuevo layout al renderizar.