TigerZF
🌐Español

6.2. Uso de Zend_Layout

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.

6.2.1. Configuración del 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).

6.2.2. Crear un script de layout

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.

6.2.3. Acceso al objeto layout

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 de Zend_Layout registrada 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().

6.2.4. Otras operaciones

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_Layout mantiene su propio registro de variables de vista específicas del layout a las que puedes acceder; la clave $content mencionada 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étodo assign().

    // 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étodo disableLayout() 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 $layoutPath especificado en tu configuración. Zend_Layout entonces usará este nuevo layout al renderizar.