October 23rd, 2011 Category: Curso Uncategorized Zend Framework
15 Comments »

Se hizo esperar este ultimo capitulo, la verdad es que tuve algunos problemas con los codecs, y poco tiempo para resolver este problemita.

Lo prometido es deuda y hoy les voy a mostrar como crear un sitio multidioma.

Como primera medida me baje las banderitas desde iconfinder y las agregue en el top bar de la aplicacion.

Aca les dejo el video para que vean lo simple que es crear un sitio multiidioma con Zend Framework.

Ver todos los capitulos del curso

Seguir leyendo

October 2nd, 2011 Category: Curso Zend Framework
20 Comments »

En este video vamos a darle un poco de estilo al proyecto usando Twitter Bootstrap, bootstrap es una estructura de diseno y contiene varias herramientas que nos van a facilitar trabajar con el diseno.

Esto puede usarse como base para cualquier proyecto.

Pueden ver mas de este proyecto aca Boostrap from Twitter, tambien pueden encontrar este proyecto en github

Aca les dejo el video para que vean como agregar Bootstrap en Zend Framework.

Ver todos los capitulos del curso

Seguir leyendo

September 12th, 2011 Category: Curso php5 Programacion Zend Framework
23 Comments »

Llego la hora de hacer algo util, hoy vamos a ver como configurar nuestra aplicacion para trabajar con una base de datos mysql, para eso vamos a usar Zend_Form para crear formularios y vamos a crear modelos para poder traer datos de nuestras tablas y poder escribir en ellas.

Si te perdiste el video anterior podes verlo aca

Es recomendable ver el video en 720p de resolucion y en pantalla completa.

Los que quieran descargarse el codigo fuente pueden hacerlo desde github en http://github.com/pablofmorales/News123

Capitulos Anteriores
Capitulo 1 < Configuracion y creacion del proyecto
Capitulo 2 < Estructura de directorios, MVC y layouts
Capitulo 3 < Objeto view, y contenido estatico

Proximo capitulo > Edicion, y Paginado.

Gracias Maestrosdelweb por darme un espacio en su cuenta de youtube

Seguir leyendo

July 18th, 2011 Category: Curso php5 Programacion Zend Framework
26 Comments »

Este es el primero de una serie de screencast donde la idea es mostrar como crear un proyecto con Zend Framework.

Vamos a crear un portal de noticias que llamaremos “news123″ a medida que pasen las clases vamos a darle forma al proyecto.

En el primer capitulo vamos a configurar nuestro proyecto desde 0. Esto incluye el startup del proyecto y la configuracion en netbeans, y en Apapche para que corra dentro de un virtualhost dentro de un servidor local.

Recomiendo ver el video en pantalla completa y en la resolucion 720p para poder ver con claridad el tutorial.

Los que quieran descargarse el codigo fuente pueden hacerlo desde github en http://github.com/pablofmorales/News123

Proximo capitulo >

Seguir leyendo

February 12th, 2010 Category: base de datos mysql Programacion Zend Framework
5 Comments »

Una transacción es un conjunto de operaciones en la base que se
ejecutan por separadas pero están relacionadas la una con la otra y
necesitamos que si se ejecuta una operación se asegure que también lo
haga en las operaciones siguientes.

En los tipos de tablas transaccionales (InnoDb y DBD ) de MySql,
tenemos la opción de determinar cuando hacer un commit, esto nos
permite hacer un rollback en el caso de que no estemos felices con el
resultado de nuestra transacción.

En las tablas del tipo no transaccional (MyIsam) esta opción no
existen porque están seteadas para que se haga un auto commit, esto
significa que no vamos a poder usar transacciones para tablas de Tipo
MyIsam, solo para InnoDb.

Con las tablas InnoDb nosotros podemos controlar cuando hacer el
commit. Podemos revisar que todas las operaciones se hayan realizado
de forma correcta y recién ahí hacer un commit de la transacción.

Con esta forma nosotros nos aseguramos que una operación se ejecute en
su totalidad, e informar al usuario o a quien sea necesario el
resultado de la misma.

La gente de Doctrine en su blog comentan que su ORM aumenta la
velocidad de mysql, ya que ellos manejan transacciones de forma nativa
en todas sus operaciones,
http://www.doctrine-project.org/blog/transactions-and-performance .
Les recomiendo que lean el articulo, aunque esta en ingles es bastante
claro. Quizás el articulo los entusiasme y se metan un poco en el
mundo de los ORM.

Zend Framework como no podía de ser de otra forma tiene soporte para
transacciones. Si tenemos ZF en un sistema con MVC, y tenemos que
hacer una transacción que involucre mas de un modelo, la transacción
la podemos abrir en cualquiera de ellos, y comitearla.

La forma correcta es conseguir el adapter. El cual nos brinda la
interfaz con la conexion a la base de datos. El mismo lo podemos
conseguir llamando al metodo getAdapter de cualquiera de nuestros
modelos.

class TestController extends Zend_Controller_Action
{
       public function createAction()
       {
               $params = $this->_getAllParams();
               $model1 = new MyFirstModel();
               $model2 = new MySecondModel();
               //Conseguimos el Adapter de nuestra conexion
               $db = $model1->getAdapter();
               // Iniciamos la transaccion
               $db->beginTransacction();
               try{
                       $model1->insert( $params );
                       $model1->insert( $params );
                       // Sino hubo ningun inconveniente hacemos un commit
                       $db->commit();
               } catch( Exception $e ) {
                       // Si hubo problemas. Enviamos todo marcha atras
                       $db->rollBack;
               }

       }
}

En el código de ejemplo podemos ver como recibimos ciertos datos por
POST/GET y los datos los guardamos en dos modelos diferentes, esas
acciones están dentro de un try/catch, el que nos permite atrapar las
excepciones que podrían ser enviada por alguna de las operaciones que
tenemos dentro de la transacción en cuyo caso ejecutamos el rollback.
Si todo salio bien llamamos al metodo commit.

Si nosotros queremos forzar dentro de nuestros modelos un rollback lo
mas transparente es tirar una excepcion, y desde el controller se
ejecuta el rollback. La forma de generar una excepcion es la
siguiente.

Para saber mas de transacciones nada mejor que ir a las fuentes originals.

MySql http://dev.mysql.com/doc/refman/5.0/es/ansi-diff-transactions.html
Zend Framework http://framework.zend.com/manual/1.10/en/zend.db.adapter.html#zend.db.adapter.transactions

Seguir leyendo

March 9th, 2009 Category: Oracle php5 Uncategorized
12 Comments »

Drupa Zend Framework

Este ultimo tiempo estuve bastante ocupado cerrando algunos proyectos por eso la falta de post en el blog.

El proyecto que mas me ocupo mi tiempo es Personal Book que desarrollamos en Easytech. Basicamente PBOOK es un sistema de ventas de libro online, con el agregado que podes agregarle una dedicatoria a cualquier libro que compres. Atras de este proyecto esta una de las empresas grandes de Chile, Dimacofi.

Despues de viajar a Chile para ultimar detalles sobre el cierre del proyecto, hoy por fin se hace publica la pagina para que cualquier Chileno (por ahora), pueda comprar libros de forma online, sin la necesidad de depender de un stock y sin moverse de su casa.

Para el proyecto se decidio usar Drupal para el manejo del sitio, y los contenidos  y Zend Framework para todo el resto. Se uso 2 motores de base de datos, mysql para Drupal, y Oracle XE para el resto.

El sitio cuenta con varios subsistemas, que se comunican entre si a traves de colas de ActiveMQ, un sistema de colas de la gente de Apache Software Foundation, el cual nos resulto excelente para esta funcion.

Si tienen la oportunidad naveguen el sitio y vean como pueden trabajar en perfecta armonia Zend Framework y Drupal .

site: www.personalbook.cl

Seguir leyendo

January 13th, 2009 Category: Programacion
27 Comments »

frameworks para las web

Es muy interesante ver que en la actualidad la mayoría de las empresas serias de desarrollo web se están volcando al uso de framework en sus desarrollos. Esto tiene una ventajas para el empleador, el empleado, y el cliente.

El empleado esta aprendiendo a desarrollar con un framework y no solo un framework sino una estructura de trabajo la cual le sirve para agregar en su currículum, el empleador consigue ahorrarse tiempo en desarrollos y en controles, y el cliente obtiene en menor tiempo y con una mejor calidad sus productos.

La explicacion es muy simple, los frameworks web actuales no son desarrollados por un equipo reducido de personas, sino que están continuamente creciendo gracias al apoyo de las comunidades virtuales.

Estos Frameworks, generalmente son open source, y están desarrollados y apoyado por grandes corporaciones, por ejemplo el caso de Symfony que tiene como Padrino a Yahoo,  que  utiliza este framework en la mayoría de sus desarrollos con PHP, como es el caso de Delicius, Yahoo Answerr y Yahoo Bookmarks. Zend Framework es apoyado por la creciente Zend Company que son los creadores del lenguaje PHP.

Estos dos son los grandes frameworks de PHP, pero hay muchos mas, muchisimos mas. La elección de cual les conviene mas, tiene que ser evaluada por la empresa, teniendo en cuenta quien le da mas o mejor de estos frameworks.

El caso de Akelos es bastante interesante, ya que su idea es construir aplicaciones en PHP al estilo Ruby On Rails, este ultimo también un gran framework y muy popular debido a la facilidad de uso y a su código bastante simple.

En la balanza aparecen muchos factores, y cada factor es importante. Yo elijo Zend Framework porque me da una flexibilidad sin atarme a ningun mecanismo. Puedo desarrollar si quiero sin implementar MVC, o incluir Zend Framework dentro de WordPress para manejar los plugins, como es el caso de este blog.

Lo mas importante, es que una empresa no tiene que preocuparse como hacer una librería para la conexion a la base de datos, o para crear a un web service, o como manejar templates dentro de su sistema, como validar formularios, etc. Y no tiene que preocuparse no porque no lo tenga que hacer, sino porque estos frameworks le brindan una solución, les dice como crear formularios, validarlos tanto del lado del cliente como del servidor, manejar distintos templates, manejar base de datos, etc, etc,etc. Y no solo soluciones del tipo “necesito conectarme a una base de la mejor manera posible”, es lo que no simplifica un framework, sino que nos brinda todo una forma de trabajo como es la division por capas MVC (Model View Controller), sino una estructura de directorios prolija, y clara. Sobre todo que hace fácil y organizable cualquier modulo o aplicacion.Ademas como el caso de Zend Framework, nos da una recomendacion de como escribir nuestro codigo, y trabajar en grupo.

Otro de los puntos a favor de un framework, es que es gratis. La empresa no tiene que poner un centavo y obtiene cientos o miles de lineas de código para que use sin ningún limite sin nada a cambio.

Recuerdo mucho tiempo haber rediseñado clases para la conexion a la abase de datos, o generar capas de abstracción para hacer ciertas funcionalidades, como el manejo de formularios. Y todo ese tiempo perdido si bien tengo que reconocer que aprendí bastante con la prueba y error (hubieron muchos errores lamentablemente), mis desarrollos hubiesen sido mejores y en menos tiempo aprovechando estos recursos.

Como dije en un post anterior de este blog, el costo de aprendizaje es mínimo, ya que no se tarda lo mismo generando código de cero, que aprender a usar un código existente que cumple lo que nosotros necesitamos.

Sobre el lenguaje de programacion a elegir para los desarrollos web, también depende de muchos factores, uno de los puntos a tener en cuenta, es  la cantidad de programadores que hay en el mercado, y lo que cobran estos programadores. Viendo estos factores PHP parece la mejor alternativa, pero Python con Django esta pisando fuerte y mas solido de lo que hizo Ruby On Rails hasta ahora.

Links Interesantes

Akelos

Zend Framework

Symfony

CakePHP

Ruby On Rails

Django

Codeigniter

Seguir leyendo

December 4th, 2008 Category: Zend Framework
6 Comments »

En los envíos anteriores vimos la forma de crear el frontend, la forma correcta de configurar el layout del sistema y como aprovecharlo. En esta oportunidad vamos a ver dos cosas muy importantes, como son la modularización del sistema, para crear un backend, y como conectarnos a la base de datos con Zend_Db.
Quiero que recuerden que el proyecto esta alojado en google code, pueden ver como esta quedando en http://www.blogzf.com.ar.

- Modularizar el sistema.

Uno de los problemas que me encuentro habitualmente en los foros o las listas de Zend Framework es como tener en un  mismo sistema frontend y Backoffice (backend) compartiendo la misma estructura. Este problema se puede resolver de varias formas, pero la manera correcta es crear módulos. En nuestro sistema actual teníamos el modulo default cargado, que no necesita mas configuracion, que declarar cual es el path de nuestros controllers, con el método setControllerDirectory(), y como parámetro le pasamos un string con el path correspondiente. Con esta acción, le estamos diciendo que el modulo default esta en esa ruta.

Si nosotros quisieramos agregar un modulo mas que en este caso vamos a llamarlo admin, en vez de pasarle un string vamos a pasarle un array, donde el índice va a ser el nombre del modulo, y el valor el path donde encontrar el controller.

Nuestra ruta actual es applications/controller/, esta es la ruta para el default, pero ahora que vamos a agregar un admin necesitamos ubicarlo en otro lugar. Ese lugar lo puede establecer ustedes, yo voy a elegir para guardarlo en applications/admin/controller. Ahora siguiendo esto en la carpeta application nos va a quedar la siguiente estructura.


Esto tiene una particularidad, los controllers de nuestro modulo admin, tienen que tener el prefijo de la carpeta, pero en Mayúscula no en minúscula como lo indica la lógica, ya que la carpeta admin esta en minúscula.

Ahora cuando queramos crear un controller el nombre seria algo así


Pero ya me estoy llendo por otro lado, ahora vamos a ver cual es la forma correcta de agregar los módulos en nuestro bootstrap.

setParam( 'config', 'config.default.ini' )
    ->setControllerDirectory( array(
        'default'=> '../application/controller',
        'admin'=> '../application/admin/controller'))
    ->throwExceptions(true)
    ->dispatch();

Si o si tenemos que crear un modulo con el key default, y el otro es el que queremos agregar. Si quisieramos podríamos agregar muchos mas módulos, pero no es algo que veamos en este proyecto, pero se puede

Si hacen un svn update del proyecto, van a encontrar algunas lineas mas en este código, que son las que levantan los plugins. Pero esto lo dejamos para otra entrega.

- Leyendo una base de datos

Todo blog necesita de una base de datos para almacenar los post, ahora vamos a crear una nueva base de datos llamada blogzf.

Vamos a crear la tabla 'posts', donde vamos a guardar todo el contenido de nuestro blog.

La tabla es la siguiente.

CREATE TABLE `blogzf`.`posts` (
`post_id` MEDIUMINT( 10 ) NOT NULL AUTO_INCREMENT ,
`user_id` MEDIUMINT( 10 ) NOT NULL ,
`title` TEXT NOT NULL ,
`content` LONGTEXT NOT NULL ,
`comment` TINYINT( 1 ) NOT NULL ,
`created_date` DATETIME NOT NULL ,
`modified_date` DATETIME NOT NULL ,
`status` CHAR( 10 ) NOT NULL ,
PRIMARY KEY ( `post_id` )
) ENGINE = MYISAM;

Y la tabla users.

CREATE TABLE `blogzf`.`users` (
`user_id` MEDIUMINT( 10 ) NOT NULL AUTO_INCREMENT ,
`username` CHAR( 50 ) NOT NULL ,
`password` CHAR( 50 ) NOT NULL ,
`display_name` CHAR( 100 ) NOT NULL ,
`status` CHAR( 10 ) NOT NULL ,
PRIMARY KEY ( `user_id` )
) ENGINE = MYISAM;

Ahora vamos a tener que crear un ABML o CRUD (CREATE, READ, UPDATE, DELETE) para estos modulos.

En esta parte no vamos a darle funcionalidad a este modulo, vamos a dejarlo para la proxima, asi podemos extendernos un poco y ver Zend_Paginator, Zend_Form, entre otros.

Lo primero que tenemos que hacer es crear el controller, model, y vista de users, vamos a empezar con el mas facil.

Creamos los actions para nuestro CRUD.


El modelo va a ser bastante simple


Y las vistas.

Un buen ejemplo de como crear un CRUD con Zend Framework  lo tenemos en el blog de Zsamer.
Lo primero que tenemos que hacer es configurar la conexion a la base de datos, los datos de esta lo vamos a poner en nuestro archivo de configuracion, config.default.ini.

[database]
db.adapter = PDO_MYSQL
db.config.host = localhost
db.config.username = blogzf
db.config.password = "password"
db.config.dbname = blogzf

Supongamos que tenemos una base de datos en localhost llamada blogzf,  y un usuario blogzf con la clave "password". esta seria la forma de representarlo en el ini.

Cuando levantamos esta configuracion tenemos que crear una conexion a la base de datos, esto lo vamos a hacer desde el preDispatch, la conexion la vamos a guardar en una variable privada llamada _db, para usarla en todo el modulo.

$this->_db = Zend_Db::factory(
    $config->database->db->adapter,
    $config->database->db->config
    ->toArray() );

Asi como paso con el bootstrap, el config no les va andar porque tienen que crear un archivo config.local.ini, con solo crearlo y dejarlo en blanco es suficiente, la idea de esto es generar un archivo con toda la configuracion generica, y uno que sea configurable para cada ambiente, desarrollo, qa, y Produccion. Pero eso lo vemos mas adelante.

En esta parte vimos

Zend_Config
Zend_Db


Seguir leyendo

November 25th, 2008 Category: Zend Framework
3 Comments »

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.

$config = new Zend_Config_Ini('config/config.default.ini');
$registry = Zend_Registry::getInstance();
$registry->set( 'config_ini', $config );

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.

get( 'config_ini' );

$this->view->staticServer = $config->site->static->server;
$this->view->appServer = $config->site->static->server;

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.

$response = $this->getResponse();
$response->insert( 'sidebar', $this->view->action( 'rightcontent', 'sidebar' ));
$response->insert( 'footer', $this->view->action( 'footer', 'sidebar' ));
$response->insert( 'topMenu', $this->view->action( 'menutop','sidebar' ));

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

$response->insert( 'footer', $this->view->render('sidebar/footer.phtml' ));

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/

Seguir leyendo

November 23rd, 2008 Category: varios Zend Framework
12 Comments »


Creando un blog desde cero.

Introduccion al proyecto.

La idea de este proyecto, es tratar de transmitir mis conocimientos sobre Zend Framework, y mostrar que es muy simple trabajar con el. Hace tiempo que llevo trabajando con este framework, y me facilita mucho el trabajo diario, y el trabajo en grupo. El blog posiblemente cuando se termine reemplaze a mi worpress, pero eso veremos mas  adelante como evoluciona el proyecto.

Cuando ustedes lean esto el blog va a estar bastante encaminado. Cada parte importante del desarrollo del blog voy a postearlo para que hagan comentarios, y el aprendizaje sea de apoco y no todo de golpe.

Subi el proyecto a google code, por cada corte importante del proyecto cree un tag, ese tag corresponde a un post especifco donde se explican los cambios y porque aplicamos tal o cual cosa.

Una vez el proyecto este terminado cualquiera tiene derecho a implementar este  blog que vamos a desarrollar aca es open source, y totalmente libre.

Manos a la obra

La gente que este leyendo este post, y no sepa nada de Zend Framework quizas les cueste un poco mas entenderlo porque hay conceptos que ya se hablaron en este blog, y no quiero repetirlos, si hay algo que no entienden pueden preguntarlo o googlearlo.

Lo primero que vamos a hacer es armar la estructura, que va a ser practicamente la misma que en el articulo que arme hace varias semanas, pero con algunos cambios, la carpeta apps, se va a llamar application, y la carpeta html sera webroot. Ademas vamos a mover la carpeta layout dentro de webroot.

Creando el virtual host.

# Blog para el proyecto

    ServerAdmin soporte@blogzf.com
    DocumentRoot /var/www/html/blogzf/webroot
    ServerName blogzf.dev
    
        Options FollowSymLinks
        AllowOverride All
    
    # Opciones de PHP
    php_value include_path .:/var/www/html/blogzf/webroot
    ErrorLog logs/blogzf-error.log
    CustomLog logs/blogzf-access.log common

Lo primero que vamos a crear es el bootstrap, que va a ser muy simple por ahora, y generar un layout basico que vamos a pedir prestado por ahi. La configuracion inicial va a quedar bastante basica. Vamos a crear un controller IndexController, un bootstrap index.php en la carpeta webroot, un .htaccess en la carpeta webroot tambien, y una carpeta con el nombre del layout, tambien vamos a agregar como external la libreria de Zend al proyecto. Si queres saber mas sobre como hacer esto, ya hay un post en el blog.

Para ir viendo como quedo esta parte del blog pueden bajarse los archivos del tag de esta version del proyecto haciendo.

$ svn import http://blogzf.googlecode.com/svn/tags/paso_1_layouts_y_configuracion/

Si crearon bien el virtual host, con solo escribir en el navegador http://blogzf.dev:8001/, tienen que ver algo parecido a esto.

Analizando el codigo.

Como primer punto voy a describir el bootstrap, basicamente este archivo tiene que tener una configuracion basica, para que pueda llamar al controller que correspondiente, y asi ejecutar la accion que requerimos.

Nuestro bootstrap es el siguiente.

 'colorpaper/colorpaper',
                'layoutPath' => 'layout/'
);
Zend_Layout::startMvc( $options );
/**
 * Setup controller
 */
$controller = Zend_Controller_Front::getInstance();
$controller->setParam( 'config', 'config.default.ini' )
    ->setControllerDirectory('../application/controller')
    ->throwExceptions(true)
    ->dispatch();

Hacemos unas configuraciones basicas, y despues que le decimos lo path del sistema, esto lo hacemos para que la comunicacion entre carpetas, sea mas sencilla. Algo importante que va a tener nuestro sistema de Blog, es que vamos a usar Zen_Loader::registerAutoload();, lo que hace este componente, es tratar de incluir el archivo que estes llamando, de esta forma si escribis bien el nombre de una clase, haciendo referencia al path, no necesitas hacer un required, o include. Si bien esto no es muy recomendable, porque cae un poco el rendimiento, tambien es cierto que es muy comodo :) , igual despues mas adelante, cuando optimizemos el sistema, vamos a arreglar un poco este problema.

Las siguientes lineas corresponden a la configuracion del layout, que en este caso agregamos un layout, que se llama colorpaper, y queremos que ejecute colorpaper.phtml.

Las ultimas lineas ejecutan el controller,

Si vemos el codigo vamos a ver que no hay nada raro en especial tenemos un controller (IndexController), con un preDispatch, y un indexAction. El preDispatch ejecutamos todo lo que necesitamos que se cargue antes de empezar a ejecutar la accion.

view->staticServer = 'http://blogzf.dev:8001/';
        $this->view->appServer = 'http://blogzf.dev:8001/';

        /**
         * Agrego el titulo de la pagina
         */
        $this->view->headTitle()->append('Blog con Zend Framework');
        /**
         * Agrego los css para esta pagina
         */
        $this->view->headLink()
            ->appendStylesheet( $this->view->staticServer . 'layout/colorpaper/css/jd.gallery.css' )
            ->appendStylesheet( $this->view->staticServer . 'layout/colorpaper/css/pink.css' )
            ->appendStylesheet( $this->view->staticServer . 'layout/colorpaper/css/style.css' );

En las primeras lineas del preDispatch, configuramos dos propiedades, que van a afectar a las vistas y al layout, uso dos tipos de variables para guardar el dominio, porque puede surgir que yo tenga por un lado un servidor para las imagenes, css, html y en otro servidor la aplicacion en si. Por ahora va a ser la misma, pero esto va a depender de ustedes.

Al hacer $this->view->staticServer, le estamos diciendo que cree una propiedad staticServer, esta es la forma en que ZF comunica desde un controller a una vista.

Despues tenemos la linea

$this->view->headTitle()->append('Blog con Zend Framework');

Aca estamos seteando el titulo del blog.

Y en la siguientes lineas, agregamos los css, que vamos a trabajar.

Cuando nosotros apendeamos, un titulo, los meta, los css, y los js, podemos mostrarlos desde la vista muy facilmente, usando los metodos que van a encontrar en el layout, que veremos mas adelante.

Por ahora nuestro indexAction no hace nada, lo mismo que la vista del mismo.

Como primera meta de este proyecto me propuse tomar un diseño modernoso, y adaptarlo al sistema de layout de Zend. Quise darle un aspecto atractivo, para que llame la atencion, y vean un poco el potencial del proyecto, que a veces el problema con excelentes proyectos de este tipo el problema es que no son atractivos y no llaman la atencion, este proyecto busca llamar la atencion, por eso este diseño. Lo unico que queria para esta parte es que me mostrara los datos de forma estatica pero minimante configurado el layout, y digo minimamete porque este layout va ir mutando a medida que avanze el proyecto.

Com hablamos antes en el preDispatch, apendeamos el title, y los css del layout, para mostrarlos desde nuestro layout, hicimos lo siguiente.

<!DOCTYPE HTML PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html dir=”ltr” xmlns=”http://www.w3.org/1999/xhtml” lang=”en-US”>
<head profile=”http://gmpg.org/xfn/11″>
<?= $this->headMeta() ?>
<?= $this->headTitle() ?>
<?= $this->headScript() ?>
<?= $this->headLink() ?>
</head>
<body>

Bueno por hoy es suficiente, para la proxima vamos a seguir separando el layout, para que nos quede mejor dividido, y vamos a usar archivos de configuracion, para guardar los datos de nuestros sistemas.

En esta parte del proyecto vimos los siguientes componentes.
* Zend_Controller
* Zend_Loader
* Zend_Layout

Seguir leyendo