# Osezno PHP Framework

Osezno PHP Framework (OPF) es un framework para PHP que implementa en una aplicación web su estilo de programación, permitiendo la estandarización del código sobre un patrón de diseño MVC (Modelo Vista Controlador); este patrón genera un uso independiente de vistas basado en el uso de plantillas HTML, un control de eventos del usuario y un modelamiento de los datos. Lo anterior sumado a una abstracción de la base de datos usando Active Record y un acceso limpio a la información mediante el uso de grillas que a su vez son capaces de exportar esta información a formatos como xls, html y pdf. El tratamiento de los datos se procesan aplicando AJAX para una comunicación asincrónica con el servidor. Es una iniciativa por Colombianos que tiene como objetivo reducir el tiempo de desarrollo de aplicaciones escritas en el lenguaje PHP.
* Vistas apoyadas en plantillas HTML definidas con áreas de trabajo.
* Aplicación del patrón de construcción de Software MVC.
* Envío y recepción de datos mediante AJAX.
* Abstracción de la base de datos a objetos del lenguaje de programación PHP mediante Active Record.
* Implementación de listas dinámicas (Grids)
* Generación de Formularios HTML.

### Modelo Vista Controlador

El uso del patrón MVC garantiza la escalabilidad como un atributo de calidad de este proyecto. El MVC separa los datos de la capa de presentación y el nivel de eventos de usuario. Para desplegar las vistas se usan plantillas HTML definidas por el programador sobre las cuales de se declaran áreas de trabajo (ver figura No II) que serán reemplazadas por contenido del modelo de datos del módulo al que aplica y que a su vez cualquier evento de usuario que ocurra en esta vista será manejada por un controlador de eventos que permite al usuario interactuar con la aplicación dándole el control al mismo. Osezno PHP Framework propone la siguiente implementación del MVC: (ver figura No I)
* El modelo alimenta la vista inicial.
* El usuario interactúa con la vista, hace una petición.
* El controlador es notificado de la acción solicitada. El controlador accede al modelo actualizándolo o modificándolo.
* El controlador obtiene los datos del modelo procesados.
* El controlador actualiza la vista basado en información del modelo
* Figura No 1:
* $_{MVCpropuesto}$

### Envío y recepción de datos mediante AJAX

Cualquier cambio que se manifieste en la vista del módulo tendrá como primera opción la utilización de AJAX para manipular cambios en esa vista de usuario en donde le permite de forma rápida agregar modificaciones a esa vista, ahorrando sobre el consumo de recursos de conexión al servidor de aplicaciones permitiéndoles solamente actualizar el área o el objetivo de la operación del controlador de eventos. Si no decide usar Ajax es posible adoptar las formas tradicionales (POST y GET)

### Abstracción de la base de datos a objetos del lenguaje de programación PHP mediante Active Record

Permite mantener un control en las estructuras de las tablas de la base de datos a la que se está conectado como una forma organizada de acceder a los datos contenidos dentro de ellas. Disminuye notablemente la escritura de código SQL cambiándolo por código PHP en la que se cambian nombres de tablas por objetos del lenguaje de programación y campos de la base de datos por atributos de estos objetos; a partir de estos objetos es posible realizar operaciones CRUD.

### Implementación de listas dinámicas (Grids)

Permite al desarrollador visualizar el contenido de una tabla o una consulta SQL mediante el uso de grillas que en OPF denominamos listas dinámicas. Haciendo uso de esta utilidad es posible filtrar mediante el uso de reglas muy similares a los operadores SQL como ‘LIKE’, paginar el contenido de la consulta, limitar el contenido de registros por página, ordenar de forma ascendente o descendente las columnas asociadas a la consulta, ejecutar eventos asociados a un determinado registro guiado por su id (PK) o múltiples registros previamente seleccionados y como objetivo final de estas tareas la opción de exportar a diferentes formatos de archivo (pdf, xls y html) el resultado de la suma de estas operaciones.

## Como trabaja

La composición básica de un módulo consta de cuatro archivos; tres con extensión php (.php) y uno de extensión (.tpl) en donde cada uno cumple una diferente función. A continuación se explica de manera básica con código fuente de ejemplo y la tarea que cumple cada archivo.
* index.php
* handlerEvent.php
* dataModel.php

### template.tpl

Se declara una plantilla HTML con las siguientes etiquetas básicas:
* Html
* Head
* Body
Y se predefinen áreas de trabajo que serán reemplazadas por contenido definido por el desarrollador.

### index.php

* Dentro del archivo (index.php) se asignan los contenidos a las áreas pre-definidas de la plantilla y se hace un llamado a la plantilla.
* Se asignan contenidos propios a las áreas definidas en la plantilla y se hace un llamado a la plantilla para mostrarla.

### dataModel.php

* Se construye la base del módulo sobre un modelo de datos (dataModel.php) apropiado según sea la razón de creación del módulo de la aplicación.
* Dentro del modelo de datos se crean las clases necesarias que crean todos los objetos necesarios para alimentar inicialmente la vista

### handlerEvent.php

* Un controlador de eventos delega las acciones producidas en la vista (index.php).
* Cualquier evento producido en la vista principal es manejado por una clase manejadora de eventos del usuario que delega las acciones que el usuario desea realizar accediendo de nuevo al modelo para obtener una respuesta y alimentar de nuevo la vista principal