Proyecto web Php-MySQL-Ajax-Flex

75
Proyecto Php-MySQL-Ajax-Flex José Manuel Ortega Candel [email protected]

description

Proyecto Php-MySQL-Ajax-Flex

Transcript of Proyecto web Php-MySQL-Ajax-Flex

Page 1: Proyecto web Php-MySQL-Ajax-Flex

Proyecto Php-MySQL-Ajax-Flex

José Manuel Ortega Candel

[email protected]

Page 2: Proyecto web Php-MySQL-Ajax-Flex

Estructura del proyecto con CodeIgniter

Page 3: Proyecto web Php-MySQL-Ajax-Flex

Modelo Entidad-Relación.Esquema de la base de datos

Page 4: Proyecto web Php-MySQL-Ajax-Flex

Modelo-Vista-Controlador

models: Contiene las clases para trabajar con la capa de la base de datos. views: Contiene las vistas para mostrar el contenido de la web controllers: Contiene la mayor parte de la lógica de negocio.

Page 5: Proyecto web Php-MySQL-Ajax-Flex

Código javascript

Page 6: Proyecto web Php-MySQL-Ajax-Flex

Las librerías javascript que se usen en toda la aplicación se cargan en el fichero

views\cabecera.php.Destacar en este fichero la inclusión de las librerías de

jquery.

Peticiones Ajax

Se emplea la función de javascript $ajax pasándole por parámetros:

type: Indicamos el tipo de peticion si será via POST o GET en este caso como estamos usando CodeIgniter usaremos POST url: función controlador donde se va a procesar la petición y devolverá la respuesta data:parámetros serán enviados via POST a nuestra función success:función callback javascript encarga de procesar la respuesta después de ejecutar la petición mediante ajax.Normalmente a esta función se le pasará por parámetro el objeto response

Listado de libros

Model: application\models\librosmodel.php View: application\views\libros\listar.php Controller:application\controllers\libros.php Javascript: js\busqueda.js

js\busqueda.js

Page 7: Proyecto web Php-MySQL-Ajax-Flex

Dentro de la clase controlador Libros se encuentra la función listarLibrosAjax()

Para obtener el array de libros en formato JSON se emplea la librería Services_JSON. Para cargar esta librería en nuestro proyecto se emplea: $this->load->library('Services_JSON'); Esta función se respalda en las funciones getLibros() y getLibrosBusqueda() que

se encuentran en la clase LibrosModel

application\models\librosmodel.php

Page 8: Proyecto web Php-MySQL-Ajax-Flex

Formato JSON

La función responseLibrosJSON(response) lo que hace es generar el html para

volver a pintar la lista de libros.Para ello,se emplea el div con id=”listaLibros” de

la página views\libros\listar.php y mediante la sentencia de jquery

$(“#listaLibros”).html ,sobreescribir el contenido del div.

Con el objeto json obtenido, se construye la respuesta a través de la función

eval(response), obteniendo de esta forma un array de objetos.Para acceder a las

propiedades de cada objeto se emplea la notación objeto.propiedad.

Page 9: Proyecto web Php-MySQL-Ajax-Flex

Ejecución

Con filtro:

Sin resultados:

Page 10: Proyecto web Php-MySQL-Ajax-Flex

Paginación en CodeIgniter

application\models\librosmodel.php

En la clase controlador application\controllers\libros.php hay que cargar la

librería e inicializar los parámetros de configuración.

Page 11: Proyecto web Php-MySQL-Ajax-Flex

Detalle del libro

Model: application\models\librosmodel.php View: application\views\libros\ver.php Controller:application\controllers\libros.php Javascript: js\tabs.js

application\models\librosmodel.php

application\controllers\libros.php

Page 12: Proyecto web Php-MySQL-Ajax-Flex
Page 13: Proyecto web Php-MySQL-Ajax-Flex

Añadir un libro a la cesta de la compra

Se puede hacer a través del botón “Añadir a la cesta” desde el detalle del libro o

haciendo drag & drop sobre el elemento dentro la lista de portada.

Librería: libraries\Carro_Library.php View: application\views\libros\listar.php Controller:application\controllers\cesta.php application\controllers\libros.php Javascript: js\cesta.js

Page 14: Proyecto web Php-MySQL-Ajax-Flex

Libros favoritos

Model: application\models\librosmodel.php View: application\views\usuarios\favoritos.php Controller:application\controllers\libros.php Javascript: js\favoritos.js

application\models\librosmodel.php

Page 15: Proyecto web Php-MySQL-Ajax-Flex
Page 16: Proyecto web Php-MySQL-Ajax-Flex

Registro de un usuario

Model: application\models\ciudadesmodel.php View: application\views\usuarios\addform.php Controller:application\controllers\usuarios.php Javascript: js\usuarios_addform.js

Combo Paises-Ciudades

El combo de selección del campo ciudad se carga de forma dinámica a partir del

país seleccionado.

En el evento onChange del combo de paises se llama a la función:

Obtiene las ciudades de un determinado país a partir del id_pais que se envía

Page 17: Proyecto web Php-MySQL-Ajax-Flex

Genera el combo de ciudades mediante consulta a la base de datos

application\models\ciudadesmodel.php

Vuelve a pintar los datos en el componente

Page 18: Proyecto web Php-MySQL-Ajax-Flex
Page 19: Proyecto web Php-MySQL-Ajax-Flex

Comprobar email registro

Model: application\models\usuariosmodel.php View: application\views\usuarios\addform.php Controller:application\controllers\usuarios.php Javascript: js\usuarios_addform.js

En el evento onBlur del campo email se llama a la función comprobarEmail()

Javascript: js\usuarios_addform.js

application\controllers\usuarios.php

Page 20: Proyecto web Php-MySQL-Ajax-Flex

application\models\usuariosmodel.php

Si el email introducido ya está registrado muestra el mensaje “Email ya existe”

Si el email introducido no ha sido utilizado, muestra la confirmación de que es

correcto

Page 21: Proyecto web Php-MySQL-Ajax-Flex

Login usuario

Model: application\models\usuariosmodel.php View: application\views\usuarios\loginform.php Controller:application\controllers\usuarios.php Javascript: js\usuarios_loginform.js

Javascript: js\usuarios_loginform.js

Page 22: Proyecto web Php-MySQL-Ajax-Flex
Page 23: Proyecto web Php-MySQL-Ajax-Flex

Autocompletado en campo de búsqueda por título y por tag

Model: application\models\librosmodel.php View: application\views\libros\listar.php Controller:application\controllers\libros.php Javascript: js\ jquery.autocomplete.js js\busqueda.js

js\busqueda.js

application\controllers\libros.php

Page 24: Proyecto web Php-MySQL-Ajax-Flex

Autocompletado en título

Autocompletado en tag

Page 25: Proyecto web Php-MySQL-Ajax-Flex

Usuarios activos

Model: application\models\usuariosmodel.php View: application\views\libros\listar.php Controller:application\controllers\usuarios.php Javascript: js\ usuarios_activos.js

js\ usuarios_activos.js

application\controllers\usuarios.php

Page 26: Proyecto web Php-MySQL-Ajax-Flex

application\models\usuariosmodel.php

Page 27: Proyecto web Php-MySQL-Ajax-Flex

Filtro de libros por rango precio con la barra de desplazamiento

Model: application\models\librosmodel.php View: application\views\libros\listar.php Controller:application\controllers\libros.php Javascript: js\ usuarios_slider.js

js\ usuarios_slider.js

application\controllers\libros.php

application\models\librosmodel.php

Page 28: Proyecto web Php-MySQL-Ajax-Flex
Page 29: Proyecto web Php-MySQL-Ajax-Flex

Cesta de la compra, con la posibilidad de actualizar la misma estableciendo la

cantidad para cada producto.

Librería: libraries\Carro_Library.php View: application\views\cesta\ver.php Controller:application\controllers\cesta.php

Page 30: Proyecto web Php-MySQL-Ajax-Flex

Libros en formato RSS

Model: application\models\librosmodel.php View: application\views\libros\rss.php Controller:application\controllers\feed.php

application\controllers\feed.php

application\models\librosmodel.php

application\views\libros\rss.php

Page 31: Proyecto web Php-MySQL-Ajax-Flex
Page 32: Proyecto web Php-MySQL-Ajax-Flex

Código generado RSS

Se genera un xml que contiene las siguientes etiquetas:

Cabecera: donde ira la versión de XML y la codificación.

Canal: todo rss debe de tener un nodo raíz <channel>

Información: aquí ira los datos del canal: titulo, link, descripción, fecha de actualización, idioma y copyright.

Items, los items serán los bloques de información,normalmente las noticias o posts de los blogs. Dentro de los items encontraremos otras etiquetas relativas al titulo del item, un enlace una descripción y el autor.

Page 33: Proyecto web Php-MySQL-Ajax-Flex

Comentarios de un libro por parte de usuarios registrados

Model: application\models\librosmodel.php View: application\views\libros\comentar.php Controller:application\controllers\libros.php

application\models\librosmodel.php

Page 34: Proyecto web Php-MySQL-Ajax-Flex

Categorias,SubCategorias ,Canales RSS

Model: application\models\categoriasrssmodel.php View: application\views\libros\busquedaRss.php Controller:application\controllers\feed.php

Categorias

application\views\libros\busquedaRss.php

application\controllers\feed.php

Page 35: Proyecto web Php-MySQL-Ajax-Flex

application\models\categoriasrssmodel.php

Subcategorias

application\views\libros\busquedaRss.php

application\controllers\feed.php

Page 36: Proyecto web Php-MySQL-Ajax-Flex

application\models\categoriasrssmodel.php

Canales

application\views\libros\busquedaRss.php

application\controllers\feed.php

Page 37: Proyecto web Php-MySQL-Ajax-Flex

application\models\categoriasrssmodel.php

Page 38: Proyecto web Php-MySQL-Ajax-Flex

Mapa usuarios

Permite localizar en un mapa de google los usuarios registrados

Model: application\models\usuariosmodel.php View: application\views\usuarios\mapa.php Controller:application\controllers\usuarios.php

application\controllers\usuarios.php

application\models\usuariosmodel.php

Page 39: Proyecto web Php-MySQL-Ajax-Flex
Page 40: Proyecto web Php-MySQL-Ajax-Flex
Page 41: Proyecto web Php-MySQL-Ajax-Flex

Librería DHTML History

Javascript:js\ dhtmlHistory.js

Librería que permite mantener la funcionalidad de los botones atrás y siguiente del navegador y permite cambiar la dirección del navegador sin recargar la página.

<script type="text/javascript" src="js/dhtmlHistory.js"></script>

La forma de uso es llamar al método add de la clase dhtmlHistory cada vez que hagamos una petición AJAX. Al método add le pasaremos dos parámetros, el primero será la nueva dirección que deseamos poner en la barra de direcciones y el segundo datos que queramos guardar en la “cache” que nos proporciona dhtmlHistory. Uso de dhtml history

Page 42: Proyecto web Php-MySQL-Ajax-Flex

Proyecto Flex mediante amfphp

Amfphp permite conectar PHP con Flash y Flex mediante llamadas remotas.

Estructura de amfphp

+ amfphp +services +core +browser -gateway.php -globals.php -.htaccess -json.php -xmlrpc.php -phpinfo.php

Clases services

Los services son clases de tipo Controller que permiten definir las funciones que se utilizarán

desde flex para ejecutar la lógica de la aplicación.

Page 43: Proyecto web Php-MySQL-Ajax-Flex

Por ejemplo para obtener el listado de libros desde flex se emplea la clase

LibrosService que contendrá un método para cada operación que se considere

independiente.

Para obtener la lista de libros de portada desde flex, se declara el objeto remoto

junto con los métodos que se van a usar,en este caso se declara el objeto

librosService.

Luego dentro de la función cargarLibros() se ejecuta el método listarPortada()

del objeto librosService

Page 44: Proyecto web Php-MySQL-Ajax-Flex

Como resultado de la llamada al método librosService.listarPortada() ,tal como

está definido en el atributo result de la etiqueta method, se llamaría al método

resultLibrosHandler(event),que devolvería una colección de libros para pintarlos

en el datagrid:

Una vez se haya obtenido la lista de libros,se emplea el componente DataGrid

,que lo que hace es montar una tabla con las columnas que se indiquen y en el

atributo dataProvider se le pasa la colección con los resultados obtenidos.

<mx:DataGrid id="dgLibros" dataProvider=”{dataLibros}”> <mx:columns>

<mx:DataGridColumn headerText="Titulo" dataField="titulo"/> <mx:DataGridColumn headerText="Autor" dataField="autor"/>

</mx:columns> </mx:DataGrid>

Un dataProvider es una colección de datos, similiar al ArrayCollection, que sirve

de modelo para los componentes Flex. De este modo se cumple el patrón MVC

(Model-View-Controller)

Los ArrayCollection a su vez se pueden utilizar como proveedores de datos

dataProvider para componentes basados en listas como List, Tree, DataGrid,

TitleList, ComboBox

Al hacer el ArrayCollection [Bindable] permite enlazarlo directamente con el

Datagrid.

Para cargar los libros cuando se carga la interfaz hay que asociar la función

cargarLibros() al evento creationComplete.

<CoreAppScreen xmlns="screens.appscreens.*" xmlns:forms="forms.*" xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" creationComplete="cargarLibros()" xmlns:comp="comp.*">

Page 45: Proyecto web Php-MySQL-Ajax-Flex

Listado de libros en flex con componente Datagrid

Buscar por titulo

Page 46: Proyecto web Php-MySQL-Ajax-Flex

Buscar por precio mediante slider

Componente slider y funciones

Page 47: Proyecto web Php-MySQL-Ajax-Flex

Galeria de imágenes

Page 48: Proyecto web Php-MySQL-Ajax-Flex

Obtener datos de un libro

Page 49: Proyecto web Php-MySQL-Ajax-Flex

Insertar nuevo libro

Para insertar un nuevo libro se lanza el evento nuevoLibro

Este evento se define dentro de la etiqueta Metadata

Donde name es el nombre del evento y type el tipo de evento lanzado (si no se

declara el type por defecto lanza el evento tipo de Flex flash.events.Event).En

este caso nuestro tipo de evento es la clase LibroEvent, definida dentro de la

carpeta de events.

Page 50: Proyecto web Php-MySQL-Ajax-Flex

Combos autores y editoriales

Creamos un comboBox donde sus datos provienen de una colección de datos del tipo ArrayCollection. La propiedad del ComboBox labelField indica qué campo de la colección de datos debe mostrar en la interfaz gráfica.

Page 51: Proyecto web Php-MySQL-Ajax-Flex

Validaciones en el formulario

Page 52: Proyecto web Php-MySQL-Ajax-Flex
Page 53: Proyecto web Php-MySQL-Ajax-Flex

Actualizar un libro mediante double click sobre el Datagrid

Clase para encapsular los datos del libro

comp\Libro.as

A la clase “Libro” se le añade un método estático (static) que nos permita crear

un objeto de la clase Libro a partir de un objeto Object.

Este método se llama buildLibro, como parámetro le llegará un objeto de tipo

Object y devolverá un objeto de tipo Libro.

Page 54: Proyecto web Php-MySQL-Ajax-Flex

src\views\LibroForm.mxml

Page 55: Proyecto web Php-MySQL-Ajax-Flex

Administración de Libros

src\screens\appscreens\LibrosScreen.mxml

src\forms\LibroForm.mxml

src\forms\NuevoLibroForm.mxml

Registro de un libro con validaciones

Page 56: Proyecto web Php-MySQL-Ajax-Flex

Actualizar los datos de un libro

Page 57: Proyecto web Php-MySQL-Ajax-Flex

Eliminar un libro con confirmación

Subir imágenes de un libro

Page 58: Proyecto web Php-MySQL-Ajax-Flex

Eliminar las imagenes arrastrándolas a la papelera

Tags de un libro

Page 59: Proyecto web Php-MySQL-Ajax-Flex

Crear un nuevo tag

src\forms\TagForm.mxml

Asignar un tag al libro mediante drag&drop

Page 60: Proyecto web Php-MySQL-Ajax-Flex

Eliminar un tag del libro mediante drag&drop

Page 61: Proyecto web Php-MySQL-Ajax-Flex

Comentarios

src\screens\appscreens\ComentariosScreen.mxml

Eliminación de comentarios con confirmación

Page 62: Proyecto web Php-MySQL-Ajax-Flex

Editoriales

src\screens\appscreens\EditorialesScreen.mxml

Pantalla de login

src\screens\LoginScreen.mxml

Page 63: Proyecto web Php-MySQL-Ajax-Flex

Usuarios

src\screens\appscreens\UsuariosScreen.mxml

Page 64: Proyecto web Php-MySQL-Ajax-Flex

Detalle de un Libro

src\forms\LibroForm.mxml

Definimos el objeto librosService donde se declaran los métodos que están definidos en la clase LibrosService

Page 65: Proyecto web Php-MySQL-Ajax-Flex

Insertar mediante drag &drop desde la tabla autores

En la pantalla de detalle de un libro se ha añadido la opción de

relacionar autores con este libro mediante drag&drop. Cada vez que se arrastre de la lista de autores de la izquierda (todos los autores) a

la lista de la derecha, se grabará en la relación muchos a muchos ese

registro. Si se hace el proceso inverso se eliminará.

En el DataGrid de AutoresLibro se añade el evento dragDrop y la función asociada al mismo <mx:DataGrid width="219" height="311" doubleClickEnabled="true" dragEnabled="true" dropEnabled="true" id="dgAutoresLibro" dragOver="dragOverHandler(event)" dragDrop="doDragDropAutor(event)" dataProvider="{dataAutoresLibro}">

Page 66: Proyecto web Php-MySQL-Ajax-Flex

Eliminar mediante drag &drop desde la tabla libros_autores

Page 67: Proyecto web Php-MySQL-Ajax-Flex

Validaciones y formatos de datos en LibroForm

Page 68: Proyecto web Php-MySQL-Ajax-Flex

Listado de autores

src\screens\appscreens\AutoresScreen.mxml

Page 69: Proyecto web Php-MySQL-Ajax-Flex

Autocompletado

Filtro por nombre de autor

Page 70: Proyecto web Php-MySQL-Ajax-Flex

Insertar/Modificar autor

src\forms\AutorForm.mxml

Objeto autoresService

Page 71: Proyecto web Php-MySQL-Ajax-Flex

Validación

Page 72: Proyecto web Php-MySQL-Ajax-Flex

Actualizar autor

Eliminar autor desde listado

Una vez realizada la consulta y obtenido el listado, tenemos un botón Eliminar, que al hacer click sobre él, nos pedirá confirmación del

borrado.Para ello habrá que registrar un listener de tal forma que

cuando se haga click en el botón se llama a la función eliminar_handler.

Para ello se emplea la función addEventListener del datagrid

dgAutores

Page 73: Proyecto web Php-MySQL-Ajax-Flex
Page 74: Proyecto web Php-MySQL-Ajax-Flex

Biografia autor mediante tooltip Se crea un nuevo componente que pinte la descripción dentro de la caja.

src\comp\biografiaRenderer.mxml

src\screens\appscreens\CustomToolTip.mxml

Page 75: Proyecto web Php-MySQL-Ajax-Flex

Galería de autores

src\comp\galeriaAutores.mxml

src\data\autores.xml