You are on page 1of 35

Daniel Correa Botero Universidad Nacional de Colombia Sede Medelln 2012 yo@danielgara.

com

Las capas en azul representan mdulos prediseados que no se deben programar.

Es la capa que permite la conexin entre el controlador y la vista.


Es la encarga de pasar variables a la capa vista (mediante la funcin assign). Es la encarga de decidir que templates mostrar por pantalla (mediante la funcin display).

Todos los controladores, poseen una variable llamada $this->engine (que es toda la capa motor de templates), esta variable es realmente un objeto de la clase Smarty, y esta variable contiene todas las funciones de Smarty para php.

- Creamos el controlador example3.php en la ruta: glight/example3.php - Creamos el template example3.tpl en la ruta: glight/templates/example3.tpl

- Creamos el controlador example4.php en la ruta: glight/example4.php - Creamos el template example4.tpl en la ruta: glight/templates/example4.tpl

La capa vista se caracteriza por manejar toda la parte visual de la aplicacin (imgenes, textos, vdeos, fondos, etc). Esta capa solo puede contener lenguaje html y sintaxis de smarty para html (un pseudolenguaje propio de este motor de plantillas). (Todos los archivos de esta capa se encuentran en la ruta glight/templates/)

1) Todos los archivos de esta capa se deben encontrar en la ruta glight/templates/* 2) El nombre de cada archivo o template se debe escribir en minscula, y en caso de que contenga 2 o ms palabras se debe usar el guion bajo y finalmente deben terminar con la extensin .tpl (ejemplo: contact.tpl - my_docs.tpl - index.tpl) 3) Los templates nicamente deben contener cdigo html y smarty, no deben contener ni una sola lnea de cdigo php. 4) No se recomienda hacer clculos dentro de los templates (como
multiplicaciones, divisiones, manejo de strings, entre otros). Todas estas operaciones se deben hacer previamente en los controladores y luego asignar los resultados a los templates.

Primero debemos tener en cuenta que todo lo que vaya dentro de un template y contenga llaves {} es sintaxis smarty.
Todo lo que vaya dentro de llaves con un signo peso {$example} es una variable. Todo lo que vaya dentro de {literal}{/literal} es cdigo javascript o css que se puede insertar normalmente, si no se inserta dentro de estas etiquetas de "literal" no podr ser cargado normalmente esto debido a que tanto javascript como css usan las llaves con otro fin diferente al de smarty.

{$foo} -- displaying a simple variable (non array/object) {$foo[4]} -- display the 5th element of a zero-indexed array {$foo.bar} -- display the "bar" key value of an array, similar to PHP $foo['bar'] {$foo.$bar} -- display variable key value of an array, similar to PHP $foo[$bar] {$foo->bar} -- display the object property "bar" {$foo->bar()} -- display the return value of object method "bar" {$foo[bar]} -- syntax only valid in a section loop, see {section} {assign var=foo value="baa"}{$foo} -- displays "baa", see {assign} Otras Combinaciones {$foo.bar.baz} {$foo.$bar.$baz} {$foo[4].baz} {$foo[4].$baz} {$foo.bar.baz[4]} {$foo->bar($baz,2,$bar)} -- passing parameters {"foo"} -- static values are allowed

Sirve para incluir templates dentro de otros templates.


<html> <head></head> <body> {include file='promotion_one.tpl'} Text HERE {include file='promotion_two.tpl'} </body> </html>

{if $name eq 'Fred'} Welcome Sir. {elseif $name eq 'Wilma'} Welcome Ma'am. {else} Welcome, whatever you are. {/if}
Nota: se puede usar tanto ==, !=, o como eq, o neq.

{for $foo=1 to 3} Number: {$foo}, {/for}


Los fors no son casi usados, se recomienda usar el foreach o section

{assign var="name" value="Bob"} The name is {$name}. {$name='Bob'} The name is {$name}.

Esta capa contiene todo el control de la lgica del sistema, modifica la informacin para entregarla correctamente a las capas adyacentes, es como una especie de intermediario del sistema. Esta capa solo contiene cdigo php.
El xito de los controladores y cuantas funciones agregar o no en cada uno, es cosa de practica y de realizar ejemplos, generalmente cada controlador es asociado con una tarea u objetivo especifico, en muchos casos se asocia con un proceso del diagrama de procesos, o con un caso de uso.

1) Todos los controladores deben extender (o heredar) de la clase 'super_controller' (clase que se definir mas adelante) 2) Todos los nombres de los archivos php de los controladores deben ir en minscula y en caso de que contenga 2 o ms palabras se debe usar el guion bajo y finalmente deben terminar con la extensin .php (ejemplo: contact.php - my_docs.php index.php) 3) El nombre de la clase controladora debe ser igual a "c_" ms el nombre de la ruta global y del archivo php que la contiene, por ejemplo en el controlador glight/index.php, la clase interna se debe llamar c_index

4) No se debe colocar ni una sola lnea de cdigo html en los controladores. Solo deben contener cdigo php. 5) Todos los controladores deben contar con una funcin de 'run', una funcin de 'display' y fuera de la clase deben tener una variable $call que sea del mismo tipo del controlador y que ejecute la funcin $call->run()

$engine: como vimos anteriormente, esta variable es un objeto de la clase Smarty y representa la capa motor de templates

$gvar: es un variable que contiene toda la informacin del archivo glight/configs/links.php contiene todas los enlaces y nombres de los archivos de la aplicacin (mas adelante se detallar mejor)
$img_warning: contiene una imagen de alerta, por defecto es una x que significa error, pero tambin puede ser un chulo que significa que todo sali bien. $msg_warning: contiene un mensaje de alerta, por defecto es vacio. $error: por defecto es un 0 que significa que no se han encontrado errores, en caso de que se encuentra un error se le debe asignar a 1 (mas adelante se detallaran ejemplos) - Junto con las otras 2 variables anteriores, estas 3 se usan para mostrar mensajes de alerta en el template message.tpl

$get: contiene todo los datos en forma objetual que se enven por el mtodo $_GET desde los templates.

$post: contiene todo los datos en forma objetual que se enven por el mtodo $_POST desde los templates.
$files: contiene todo los datos $_FILES en forma objetual que se enven desde los templates $session: contiene todas las variables de $_SESSION pero en forma de array (no se transforma a forma objetual debido a que no es recomendable guardar objetos en SESSION).
$temp_aux es un template auxiliar que se usa para mostrar datos dependiendo de condicionales, por defecto hace referencia al template empty.tpl que es un template vaci. (Mas adelante se explicara su uso con ejemplos).

Esta capa se basa en 4 secciones principales: - Zona de inclusiones (Fondo amarillo) - Zona de funciones propias (Fondo rojo) - Zona de display (Fondo verde) - Zona de run (Fondo Azul)

En esta zona se deben incluir los archivos que se necesiten para el funcionamiento del controlador; siempre se debe incluir el glight/configs/include.php (debido a que ese archivo carga toda la informacin importante del framework), y en caso de utilizar mdulos entonces tambin se debern incluir los archivos respectivos a cada mdulo. Por ejemplo si un controlador desea mostrar un calendario, y ese calendario es un mdulo que se encuentra en la carpeta glight/modules/m_calendar/calendar.php, entonces se deber hacer su respectiva inclusin en esta zona. Nota: no se necesitan incluir los mdulos o capas de db.php, orm.php, object_standard.php, ni super_controller.php ya que estos estn incluidos directamente desde el archivo glight/configs/include.php

En esta zona el programador define las funciones que considere necesarias, en el caso de que el programador solo desee mostrar un template por pantalla y no desee hacer nada mas, entonces no necesitara crear funciones propias para ese controlador, solo le bastara con la funcin de display.
En el caso por ejemplo de agregar, editar y/o borrar datos de la base de datos, o realizar operaciones con clculos o llamar otros mdulos para exportar la informacin a pdf o excel, entre otros) en ese caso se recomienda definir funciones propias para el controlador, para tener el mismo bien organizado.

Nota: Si un proceso requiere de una operacin a una base de datos (diferente a select) o una verificacin de datos debe ir en una funcin propia y no en el display.

Esta zona es la encargada de manejar la comunicacin con la capa vista, desde all se realizan todos los display de templates que se necesiten mostrar, es importante resaltar que se recomienda que sea desde la nica parte del controlador que se llame la funcin display del motor de templates ($this->engine->display) esto con la intensin de hacer un fcil seguimiento de que templates se van mostrando y en que orden. Nota: Todos los controladores deben contar con esta zona, no siempre se debe hacer un display de un template, tambin se pueden generar salidas de archivos para descargas, o mostrar datos en forma de pdf, entre otros.

Esta zona de run (o zona de ejecucin) se caracteriza por llamar a las funciones del controlador anteriormente creadas y por ltimo llamar la funcin display (esto debido a que una vez desarrollados todos los procesos o clculos, lo que normalmente se espera es un aviso por pantalla que puede ser un llamado a la capa vista). Tambin se definen templates auxiliares e igualmente en muchos casos se define el TRY y CATCH, funciones exclusivas de php para el tratamiento de las excepciones (mas adelante miraremos un ejemplo del uso de Try y catch).

Como podemos ver los controladores son clases, igual que el motor de templates, igual que el gestor de base de datos, igual que el mapeo objeto-relacional, e igual que los mdulos, todos son clases, pero los controladores son los nicos de todos los anteriores que crean un objeto de si mismos y se llaman a si mismos (usando la variable $call al final de cada controlador) y que poseen una zona de ejecucin.

Las G vars o variables globales, son variables que usa tanto el controlador como la capa vista, para acceder a una serie de rutas, mensajes y nombres globales para toda la aplicacin. Las G var se encuentran en el archivo glight/configs/gvar.php y para acceder a ellas existen 2 mtodos:

1) Desde un controlador: $this->gvar['nombre_de_la_var_especifica'] - por ejemplo si queremos acceder a la ruta global de la aplicacin usamos $this->gvar['l_global']; 2) Desde un template: {$gvar.nombre_de_la_var_especifica} {$gvar['nombre_de_la_var_especifica']} - por ejemplo si queremos acceder a la ruta global de la aplicacin usamos {$gvar.l_global}

- messages: son mensajes que saca la aplicacin cuando se hace una operacin lgica o una consulta a la base de datos o mensajes de alerta se caracterizan por empezar con la letra m seguida de un guin bajo por ejemplo $this->gvar['m_correct_login']; podra ser usado en glight/index.php cuando un usuario se loguea satisfactoriamente. - links: son rutas de la aplicacin, se caracterizan por empezar con la letra l seguida de un guin bajo - por ejemplo la ruta global de la aplicacin 'http://localhost/work/index.php' se encuentra en la gvar $this->gvar['l_global']; - names: son los nombres de las rutas, se caracterizan por empezar con la letra n seguida de un guin bajo - por ejemplo el nombre de la seccin de contacto es 'Contact' y se encuentra en la gvar $this->gvar['n_contact']; NOTA: volver al ejemplo anterior y usar G vars.

Las gvar nos permiten tener todos estos textos en un solo punto, lo que nos permite que si queremos cambiar los textos a otro idioma solo debamos modificar este archivo y no debamos buscar y modificar cada archivo de la aplicacin; adems si cambiamos el nombre de un archivo por ejemplo contact.php a contacto.php solo debemos editar la gvar correspondiente a ese link y toda la aplicacin seguir funcionando normalmente.

You might also like