Comenzando con Zend Framework: V Parte

Por zsamer en Abril 24, 2008

Zend_Layout implementa el clásico patrón de diseño Two Step View, permitiendo anidar el contenido de las vistas de la aplicación dentro de otra vista que sería la padre, usualmente llamada plantilla. A menudo estas plantillas son diseñadas en otra etapa del proyecto. Si necesitas saber como implementar layouts con ZF entonces este articulo es el que estabas buscando. Bienvenido al final de la serie de Artículos Comenzando con Zend Framework , en cinco partes. Recordando un poco el capitulo anterior, nosotros vimos como trabajar con formularios, bases de datos y archivo de configuraciones, esta serie va a través de los conceptos clave del desarrollo de aplicaciones con Zend Framework y complementa la teoría con numerosos ejemplos.

Los principales objetivos de Zend_Layout son:

app.pngLo primero que tenemos que definir es nuestra nueva estructura de directorio, muy similar al anterior pero ahora considerando nuestros layout.

Como se puede ver nuestro layout se encontrará en la ruta quickstart/application/layouts/scripts/, la ruta es muy importante, esta irá en la configuración de nuestro Zend_Layout.

 

Ahora necesitamos crear nuestro layout script, el cual llamaremos main.html.

quickstart/application/layouts/scripts/main.phtml

PHP:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html>
  3.     <head>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.         <title>Quickstart</title>
  6.     </head>
  7.     <body>
  8.         <h1>Quick start</h1>
  9.         <p>
  10.             | <a href="<?php echo $this->baseUrl; ?>">Home</a>
  11.             | <a href="<?php echo $this->baseUrl; ?>/about">About</a>
  12.         </p>
  13. <?php echo $this->layout()->content; ?>
  14.     </body>
  15. </html>

Es importante destacar que la variable content guarda el contenido o segmento del objeto response (permite acceder al contenido de nuestra aplicación y desplegar este en el layout).

Layout scripts simplemente utiliza Zend_View (o cualquier implementación de la interfaz view que tu estes usando). Las variables del Layout son registradas con Zend_Layout placeholder, y pueden ser asequibles vía el helper view placeholder helper o bien obteniendo como propiedades del objeto layout vía el helper layout

Ahora bien, tenemos listo nuestro layout, para hacer que nuestra aplicación implemente/utilice layouts tenemos que inicializarlo y cofigurarlo en nuestro archivo index.php o puerta de entrada al sistema aveces llamado bootstrap file.

quickstart/public/index.php

PHP:
  1. <?php
  2. /** Bootstrap */
  3. /** Configuración de manejo de error */
  4. error_reporting(E_ALL | E_STRICT);
  5. ini_set('display_startup_errors', 1);
  6. ini_set('display_errors', 1);
  7. /** Configuración de Directorios */
  8. $rootPath = dirname(dirname(__FILE__));
  9. set_include_path(get_include_path() . PATH_SEPARATOR .
  10.                  $rootPath . '/application/config' . PATH_SEPARATOR .
  11.                  $rootPath . '/application/models' . PATH_SEPARATOR .
  12.                  $rootPath . '/library' . PATH_SEPARATOR .
  13.                  $rootPath . '/public');
  14. /** Carga el archivo de configuración ini */
  15. require_once 'Zend/Config/Ini.php';
  16. $config = new Zend_Config_Ini('quickstart.ini', 'default');
  17. /** Inicializa y conecta Base de Datos */
  18. require_once 'Zend/Db.php';
  19. require_once 'Zend/Db/Table/Abstract.php';
  20. $db = Zend_Db::factory($config->database);
  21. Zend_Db_Table_Abstract::setDefaultAdapter($db);
  22. /** Inicializa layout */
  23. $options = array(
  24.     'layout'     => 'Main',
  25.     'layoutPath' => '../application/layouts/scripts/'
  26. );
  27. require_once 'Zend/Layout.php';
  28. Zend_Layout::startMvc($options);
  29. require_once 'Zend/Controller/Front.php';
  30. $frontController = Zend_Controller_Front::getInstance();
  31. $frontController->setControllerDirectory($rootPath . '/application/controllers')
  32.                 ->throwExceptions(true)
  33.                 ->dispatch();

No mucho que decir salvo que Zend_Layout::startMvc inicializa el layout para usar con MVC creando una instancia de Zend_Layout con alguna configuraciones opcionales pasada por el método. Entonces esta internamente registra un plugins de front controller el cuál se encargará de mostrar (render) el layout con el contenido de nuestra aplicación cuando loop del dispatcher haya finalizado, también registra una action helper para tener acceso al objecto layout desde cualquier action controllers. Adicionalmente, puedes acceder a la instancia del objeto desde dentro de las vistas por medio de el layout view helper.

Por último nuestra vista de la aplicación quedaría de la siguiente forma:
quickstart\application\views\scripts\index\index.phtml

PHP:
  1. <h3><?php echo $this->title; ?></h3>
  2. <ul>
  3. <?php foreach ($this->comments as $comment) :?>
  4.     <li><?php echo $this->escape($comment->comments); ?></li>
  5. <?php endforeach; ?>
  6. </ul>
  7. <?php echo $this->form;?>

Como toda cosa en la vida tiene su final, hemos concluido el set de artículos Comenzando con Zend Framework, espero que haya sido de utilidad.

Nos vemos en el próximo, asique atentos ;-).

Comentarios

13 Responses to “Comenzando con Zend Framework: V Parte”

  1. _imc_ on Abril 24th, 2008 8:55 am

    Continua estupendamente la serie, cual será el siguiente… Que atento estoy ;)

    Creo que hay un pequeño fallo en la ubicación del index.phtml, le faltaría un directorio “index”

    quickstart\application\views\scripts\index\index.phtml

    Saludos!!!

  2. zsamer on Abril 24th, 2008 1:45 pm

    gracias, tienes toda la razón, lo voy a corregir.

    saludos ;-)

  3. Sergio Armando on Abril 29th, 2008 5:10 am

    tambien estoy ala espera de que es lo siguiente…..

  4. zsamer on Abril 29th, 2008 1:38 pm

    espero tener algo antes de que termine la semana ;-)

  5. fernando on Abril 29th, 2008 6:05 pm

    Al fin Zend comenzo a utilizar un sistema nativo de plantillas y ademas mucho mas sencillo y practico que Smarty.

  6. milton on Abril 30th, 2008 6:51 pm

    será que de esto tan bueno si seguiran dando? yo tambien estoy atento!

  7. Desarrollo web para grandes mentes » Blog Archive » Zend_Layout, tener mas de un layout en nuestro sistema. on Julio 16th, 2008 2:23 pm

    [...] leyeron la guia de implementación de Zend_Layout, de zsamer en su blog. Solo nos muestra un solo [...]

  8. arturo on Septiembre 29th, 2008 8:27 pm

    Hola que buen manual ehhhh lo necesitaba mucho.
    tengo una pregunta si quiero tener mas de un sidebar en un mismo layout como seria? porfa que tambien lo necesito porfa y gracias de antemano……..

  9. Asinox on Noviembre 26th, 2008 5:08 pm

    Hola, podrias hacer un ejemplo como maquetar con diferentes partes?, me explico, como insertar la navegacion.phtml, como insertar el side.phtml, footer.phtml, etc?

    Saludos

  10. oso96_2000 on Noviembre 27th, 2008 6:18 am

    @Asinox: me parece que para eso hay que usar $this->render(’template.phtml’) o algo asi

    Pregunta o.o^

    De donde sale $this->baseUrl en tu ejemplo?

  11. zsamer on Noviembre 27th, 2008 12:27 pm

    En el tutorial anterior http://bolsadeideas.cl/zsamer/2008/04/comenzando-con-zend-framework-iv-parte/

    Método init() del controlador.

  12. maxi on Julio 26th, 2009 8:23 pm

    estimados soy principiante en PHP y me gustaria saber que herramienta usan para programar en zend? me refiero a que IDE. No me digan el notepad por favor! jajaja gracias. saludos

  13. Zend_Layout, tener mas de un layout en nuestro sistema. on Mayo 2nd, 2010 6:03 pm

    [...] leyeron la guia de implementación de Zend_Layout, de zsamer en su blog. Solo nos muestra un solo [...]

Deja tu comentario




XHTML: puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>