Creando un blog con Zend Framework – Parte 2

Creando un blog con Zend Framework – Parte 2

En esta parte vamos a emprolijar un poco nuestro sistema, en la versión anterior el objetivo era mostrar el frontend, pero el código no nos quedo muy limpio, y tampoco aprovechamos todo el potencial de ZF.

Usando Zend_Config

Si ustedes configuraron el virtual host de forma diferente al mio, y apunte a otro puerto y/o a otra url, cuando fueron a ejecutar el blog, seguramente no les tomo los estilos. Esto se debe a que nosotros hardcodeamos la url del proyecto, dentro del preDispatch, si quisieramos arreglar esto deberíamos entrar al IndexController y cambiar los valores de estas variables, si bien esto es mejor que escribir la url, una por una donde se requiera, lo mejor es tener un archivo de configuracion, donde todos estos datos que pueden variar según donde este alojado nuestro proyecto. ZF nos provee Zend_Config, y nos da la posibilidad de guardar nuestra configuracion en archivos .ini, y .xml, por simpleza, y porque me parece mucho mas claro, yo uso los .ini, que va a ser el que vamos a usar en este proyecto. Lo que hace Zend_Config, es levantar el file, y crear un objeto con todas las propiedades que pusieron en ese archivo. Vamos al ejemplo del proyecto, creamos un archivo de configuracion, dentro de la carpeta config/ llamado condig.default.ini.

Este archivo va a contener inicialmente las dos propiedades que antes teníamos en el preDispatch.

[site]
static.server = “http://blogzf.dev:8001/”
app.server = “http://blogzf.dev:8001/”

Si nuestro virtual host es diferente completamos los valores equivalentes.

La forma para levantar estos valores es muy simple, desde el bootstrap, vamos a levantar los datos de este archivo y lo vamos a almacenar con Zend_Registry, de forma tal que podamos utilizarlo en cualquier estado del sistema.

  1.  
  2. $config = new Zend_Config_Ini(‘config/config.default.ini’);
  3. $registry = Zend_Registry::getInstance();
  4. $registry->set( ‘config_ini’, $config );
  5.  

Esto es mas que suficiente, para tener nuestro archivo de configuracion en un objeto, y al alcance de cualquier clase que lo requiera.

Ahora en nuestro preDispatch, vamos a traer los valores del config, para mostrarlos en la vista con el siguiente código.

  1.  
  2. <?php
  3. $registry = Zend_Registry::getInstance();
  4. $config = $registry->get( ‘config_ini’ );
  5.  
  6. $this->view->staticServer = $config->site->static->server;
  7. $this->view->appServer = $config->site->static->server;
  8.  

La forma de traer datos de la configuracion, es anidar las propiedades, hasta el ultimo valor para que devuelva el valor correspondiente en el config. En nuestro archivo de configuracion tenemos [site] static.server, y para obtener este valor hacemos $config->site->static->server;

Limpiando el layout

En la primer parte teníamos un html pegado en colorpaper.phtml, que es nuestro layout. Para esta versión trate de separarlo por lo menos un poco, para que el archivo quede mas claro, y mas adelante podamos modificarlo de una forma mas cómoda.

Para hacer esto use $this->layout()->content, que como default, me muestra el phtml del action que estamos viendo. Por ejemplo, el action de nuestra home, deberia mostrar un listado de los ultimos post enviados.

Para el menu principal, use $this->layout->menuTop, y lo configure desde el preDispatch. Definiendo que modulo tenia que llamar para mostrar el contenido en esa seccion, lo mismo, para el sidebar, y el footer.

A todo esto cree un controller SidebarController, para que maneja estos 3 modulos (menuTop, sidebar, footer), mas adelante podemos seguir separando esto, de acuerdo al diseño que vayamos a utilizar.

Las lineas donde configuramos esto son las siguientes.

  1.  
  2. $response = $this->getResponse();
  3. $response->insert( ’sidebar’, $this->view->action( ‘rightcontent’, ’sidebar’ ));
  4. $response->insert( ‘footer’, $this->view->action( ‘footer’, ’sidebar’ ));
  5. $response->insert( ‘topMenu’, $this->view->action( ‘menutop’,’sidebar’ ));
  6.  

Sino queremos llamar a un modulo y solo queremos mostrar contenido html estatico podemos hacer un render de un archivo, por ejemplo si el codigo html del footer estuviera en un phtml, sin necesidad de llamar a una accion, podriamos hacer lo siguiente

  1.  
  2. $response->insert( ‘footer’, $this->view->render(’sidebar/footer.phtml’ ));
  3.  

Esto va a depender de las necesidades que tengamos.

Para bajarte esta version del programa podes descargartelo desde el tag

$ svn internal https://blogzf.googlecode.com/svn/tags/paso_2_layouts_y_configuracion

Componentes utilizados

Zend_Config
Zend_Registry

La url del proyecto es

http://code.google.com/p/blogzf/