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:
- Selección y prestación/render de los layout cuando se utiliza Zend Framwork MVC componentes.
- Crear variables propias del layout.
- Configuración, tales como el nombre del layout, ruta directorio etc.
- Des habilitar layouts, cambiar de un layout a otro, y otros estados; permitiendo estas acciones dentro de la acción controladora (action controllers) como también en las vistas (view scripts).
Lo 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
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
<html>
-
<head>
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
<title>Quickstart</title>
-
</head>
-
<body>
-
<h1>Quick start</h1>
-
<p>
-
| <a href="<?php echo $this->baseUrl; ?>">Home</a>
-
| <a href="<?php echo $this->baseUrl; ?>/about">About</a>
-
</p>
-
</body>
-
</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
-
/** Bootstrap */
-
/** Configuración de manejo de error */
-
/** Configuración de Directorios */
-
$rootPath . '/application/config' . PATH_SEPARATOR .
-
$rootPath . '/application/models' . PATH_SEPARATOR .
-
$rootPath . '/library' . PATH_SEPARATOR .
-
$rootPath . '/public');
-
/** Carga el archivo de configuración ini */
-
require_once 'Zend/Config/Ini.php';
-
$config = new Zend_Config_Ini('quickstart.ini', 'default');
-
/** Inicializa y conecta Base de Datos */
-
require_once 'Zend/Db.php';
-
require_once 'Zend/Db/Table/Abstract.php';
-
$db = Zend_Db::factory($config->database);
-
Zend_Db_Table_Abstract::setDefaultAdapter($db);
-
/** Inicializa layout */
-
'layout' => 'Main',
-
'layoutPath' => '../application/layouts/scripts/'
-
);
-
require_once 'Zend/Layout.php';
-
Zend_Layout::startMvc($options);
-
require_once 'Zend/Controller/Front.php';
-
$frontController = Zend_Controller_Front::getInstance();
-
$frontController->setControllerDirectory($rootPath . '/application/controllers')
-
->throwExceptions(true)
-
->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
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”
Deja tu comentario

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!!!
gracias, tienes toda la razón, lo voy a corregir.
saludos
tambien estoy ala espera de que es lo siguiente…..
espero tener algo antes de que termine la semana
Al fin Zend comenzo a utilizar un sistema nativo de plantillas y ademas mucho mas sencillo y practico que Smarty.
será que de esto tan bueno si seguiran dando? yo tambien estoy atento!
[...] leyeron la guia de implementación de Zend_Layout, de zsamer en su blog. Solo nos muestra un solo [...]
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……..
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
@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?
En el tutorial anterior http://bolsadeideas.cl/zsamer/2008/04/comenzando-con-zend-framework-iv-parte/
Método init() del controlador.
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
[...] leyeron la guia de implementación de Zend_Layout, de zsamer en su blog. Solo nos muestra un solo [...]