Programación por Capas: Motor de templates , Vista y Controlador

35
Programación por Capas: Motor de templates, Vista y Controlador Diseño y Construcción de Productos de Software Daniel Correa Botero Jeferson David Ossa Universidad Nacional de Colombia Sede Medellín 2013

description

Programación por Capas: Motor de templates , Vista y Controlador. Diseño y Construcción de Productos de Software Daniel Correa Botero Jeferson David Ossa Universidad Nacional de Colombia Sede Medellín 2013. Arquitectura G. - PowerPoint PPT Presentation

Transcript of Programación por Capas: Motor de templates , Vista y Controlador

Page 1: Programación por Capas: Motor de  templates , Vista y Controlador

Programación por Capas:Motor de templates, Vista y Controlador

Diseño y Construcción de Productos de SoftwareDaniel Correa Botero

Jeferson David OssaUniversidad Nacional de Colombia

Sede Medellín 2013

Page 2: Programación por Capas: Motor de  templates , Vista y Controlador

Arquitectura G

Las capas en azul representan módulos prediseñados que no se deben programar.

Page 3: Programación por Capas: Motor de  templates , Vista y Controlador

Capa Motor de Templates• Es la capa que permite la conexión entre el controlador y la vista.

• Es la encarga de pasar variables a la capa vista (mediante la función assign).

• Es la encarga de decidir que templates mostrar por pantalla (mediante la función 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.

Page 4: Programación por Capas: Motor de  templates , Vista y Controlador

Función Display (display.php)

Page 5: Programación por Capas: Motor de  templates , Vista y Controlador

Función Display (display.tpl)

1. Creamos el controlador display.php en la ruta: glight/display.php

2. Creamos el template display.tpl en la ruta: glight/templates/display.tpl, tal que el navegador, como salida, muestre:

Page 6: Programación por Capas: Motor de  templates , Vista y Controlador

Función Assign (assign.php)

Page 7: Programación por Capas: Motor de  templates , Vista y Controlador

Función Assign (assign.tpl)1. Creamos el controlador assign.php en la ruta:

glight/assign.php

2. Creamos el template assign.tpl en la ruta: glight/templates/assign.tpl, tal que el navegador, como salida, muestre el total de la operación.

Page 8: Programación por Capas: Motor de  templates , Vista y Controlador

Capa VistaLa capa vista se caracteriza por manejar toda la parte visual de la aplicación (imágenes, textos, vídeos, 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/.

Page 9: Programación por Capas: Motor de  templates , Vista y Controlador

Reglas de la capa vista:1. Todos los archivos de esta capa se deben encontrar en la ruta

glight/templates/*.2. El nombre de cada template se debe escribir en minúscula, y

en caso de que contenga 2 o más palabras se debe usar el guión bajo y finalmente deben terminar con la extensión .tpl (ejemplo: contact.tpl - my_docs.tpl).

3. Los templates únicamente deben contener código HTML y Smarty, no deben contener ni una sola línea de código PHP.

4. No se recomienda hacer cálculos dentro de los templates (como operaciones aritméticas, manejo de strings, entre otros). Todas estas operaciones se deben hacer previamente en los controladores y luego asignar los resultados a los templates.

Page 10: Programación por Capas: Motor de  templates , Vista y Controlador

Sintaxis de Smarty• 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 Smarty.

• Todo lo que vaya dentro de {literal}{/literal} es código JavaScript o CSS que se puede insertar normalmente (no se recomienda!). Si no se inserta dentro de estas etiquetas no podrá ser cargado normalmente esto debido a que tanto JavaScript como CSS usan las llaves con otro fin diferente al de Smarty.

Page 11: Programación por Capas: Motor de  templates , Vista y Controlador

Sintaxis 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

Page 12: Programación por Capas: Motor de  templates , Vista y Controlador

Función Include• 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>

Page 13: Programación por Capas: Motor de  templates , Vista y Controlador

Sintaxis If{if $name eq 'Fred'}

Welcome Sir.{elseif $name eq 'Wilma'}

Welcome Ma'am.{else}

Welcome, whatever you are.{/if}

• Operadores de comparación: ==, !=, eq, neq.

Page 14: Programación por Capas: Motor de  templates , Vista y Controlador

Sintaxis for{for $foo=1 to 3}

Number: {$foo}{/for}• Para pasos diferentes de 1: {for $var=$start to $end step $step}

• Los for’s no son muy usados, se recomienda usar el foreach o section.

Page 15: Programación por Capas: Motor de  templates , Vista y Controlador

Sintaxis Foreach (smarty.php)

Page 16: Programación por Capas: Motor de  templates , Vista y Controlador

Sintaxis Foreach (smarty.tpl)

Page 17: Programación por Capas: Motor de  templates , Vista y Controlador

Sintaxis Section (smarty2.php)

Page 18: Programación por Capas: Motor de  templates , Vista y Controlador

Sintaxis Section (smarty2.tpl)

Page 19: Programación por Capas: Motor de  templates , Vista y Controlador

Sintaxis para asignar variables dentro de un template

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

{$name='Bob'}The name is {$name}.

Page 20: Programación por Capas: Motor de  templates , Vista y Controlador

Capa Controlador• Esta capa contiene todo el control de la lógica del sistema,

modifica la información para entregarla correctamente a las capas adyacentes, es como una especie de intermediario del sistema. Esta capa solo contiene código PHP.

• El éxito de los controladores y cuantas funciones agregar o no en cada un es cuestión de práctica y de realizar ejemplos, generalmente cada controlador es asociado con una tarea u objetivo específico, en muchos casos se asocia con un proceso del diagrama de procesos, o con un caso de uso.

Page 21: Programación por Capas: Motor de  templates , Vista y Controlador

Reglas de los controladores:Todos los controladores deben extender (o heredar) de la clase 'super_controller' (clase que se definirá más adelante).

Todos los nombres de los archivos php de los controladores deben ir en minúscula y en caso de que contenga 2 o más palabras se debe usar el guión bajo y finalmente deben terminar con la extensión .php (ejemplo: contact.php - my_docs.php - index.php)

El nombre de la clase controlador debe ser igual a "c_" más 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.

Page 22: Programación por Capas: Motor de  templates , Vista y Controlador

Reglas de los controladores:No se debe colocar ni una sola línea de código HTML en los controladores. Solo deben contener código PHP.

Todos los controladores deben contar con una función de 'run', una función de 'display' y fuera de la clase deben tener una variable $call que sea del mismo tipo del controlador y que ejecute la función $call->run().

Page 23: Programación por Capas: Motor de  templates , Vista y Controlador

Super Controlador (Variables)$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 información del archivo glight/configs/gvar.php contiene todas los enlaces y nombres de los archivos de la aplicación (más adelante se detallará mejor).

$type_warning: contiene una imagen de alerta, valores permitidos: information - success - error - alerts .

$msg_warning: contiene un mensaje de alerta, por defecto es vacío.$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 (más 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.

Page 24: Programación por Capas: Motor de  templates , Vista y Controlador

Super Controlador (Variables)$get: contiene todo los datos en forma objetual que se envíen por el método

$_GET desde los templates.

$post: contiene todo los datos en forma objetual que se envíen por el método $_POST desde los templates.

$files: contiene todo los datos $_FILES en forma objetual que se envíen 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ó. (Más adelante se explicará su uso con ejemplos).

Page 25: Programación por Capas: Motor de  templates , Vista y Controlador

Seccionesde un

ControladorEsta 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)

Page 26: Programación por Capas: Motor de  templates , Vista y Controlador

Zona de InclusiónEn 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 información importante del framework), y en caso de utilizar módulos entonces también se deberán incluir los archivos respectivos a cada módulo.

Por ejemplo si un controlador desea mostrar un calendario, y ese calendario es un módulo que se encuentra en la carpeta glight/modules/m_calendar/calendar.php, entonces se deberá hacer su respectiva inclusión en esta zona.

Nota: no se necesitan incluir los módulos o capas de db.php, orm.php, object_standard.php, ni super_controller.php ya que estos están incluidos directamente desde el archivo glight/configs/include.php

Page 27: Programación por Capas: Motor de  templates , Vista y Controlador

Zona de Funciones propiasEn esta zona el programador define las funciones que considere necesarias, en el caso de que el programador sólo desee mostrar un template por pantalla y no desee hacer nada mas, entonces no necesitará crear funciones propias para ese controlador, sólo le bastara con la función de display.

En el caso de agregar, editar y/o borrar datos de la base de datos, o realizar operaciones con cálculos o llamar otros módulos para exportar la información a pdf o excel en se recomienda definir funciones propias para el controlador, para tener el mismo bien organizado.

Nota: Si un proceso requiere de una operación a una base de datos diferente a select o una verificación de datos debe ir en una función propia y no en el display.

Page 28: Programación por Capas: Motor de  templates , Vista y Controlador

Zona de displayEsta zona es la encargada de manejar la comunicación 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 función display del motor de templates ($this->engine->display) esto con la intensión de hacer un fácil 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, también se pueden generar salidas de archivos para descargas, o mostrar datos en forma de pdf, entre otros.

Page 29: Programación por Capas: Motor de  templates , Vista y Controlador

Zona de Run

Esta zona de run (o zona de ejecución) se caracteriza por llamar a las funciones del controlador anteriormente creadas y por último llamar la función display (esto debido a que una vez desarrollados todos los procesos o cálculos, lo que normalmente se espera es un aviso por pantalla que puede ser un llamado a la capa vista).

También 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 (más adelante miraremos un ejemplo del uso de Try y catch).

Page 30: Programación por Capas: Motor de  templates , Vista y Controlador

Nota

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 módulos, 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 ejecución.

Page 31: Programación por Capas: Motor de  templates , Vista y Controlador

Ejemplo Controlador

(conversor.php)

Page 32: Programación por Capas: Motor de  templates , Vista y Controlador

Ejemplo Controlador (conversor.tpl)

Actividades: Modifique el ejemplo anterior para que sólo haga uso del método Post.Diseñe una página que permita el uso de una calculadora con las operaciones básicas.

Page 33: Programación por Capas: Motor de  templates , Vista y Controlador

G varsLas 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 aplicación.

Las G var se encuentran en el archivo glight/configs/gvar.php y para acceder a ellas existen 2 métodos:

1. Desde un controlador: $this->gvar['nombre_de_la_gvar_especifica']por ejemplo si queremos acceder a la ruta global de la aplicación 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 aplicación usamos: {$gvar.l_global}

Page 34: Programación por Capas: Motor de  templates , Vista y Controlador

Tipos de G vars- messages: son mensajes que saca la aplicación cuando se hace una operación lógica o una consulta a la base de datos o mensajes de alerta se caracterizan por empezar con la letra m seguida de un guión bajo – por ejemplo $this->gvar['m_correct_login']; podría ser usado en glight/index.php cuando un usuario se ‘loguea’ satisfactoriamente.

- links: son rutas de la aplicación, se caracterizan por empezar con la letra l seguida de un guión bajo – por ejemplo la ruta global de la aplicación '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 guión bajo - por ejemplo el nombre de la sección de contacto es 'Contact' y se encuentra en la gvar $this->gvar['n_contact'];

Page 35: Programación por Capas: Motor de  templates , Vista y Controlador

Ventajas de las G VarsLas gvar nos permiten tener todos estos textos en un solo punto, lo que permite al momento de cambiar los textos a otro idioma solo debamos modificar este archivo y no debamos buscar y modificar cada archivo de la aplicación; además 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 aplicación seguirá funcionando normalmente.