SlideShare uma empresa Scribd logo
1 de 75
Baixar para ler offline
Proyecto Php-MySQL-Ajax-Flex

José Manuel Ortega Candel
jmoc25@gmail.com
Estructura del proyecto con CodeIgniter
Modelo Entidad-Relación.Esquema de la base de datos
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.
Código javascript
Las librerías javascript que se usen en toda la aplicación se cargan en el fichero
viewscabecera.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: applicationmodelslibrosmodel.php
View: applicationviewslibroslistar.php
Controller:applicationcontrollerslibros.php
Javascript: jsbusqueda.js

jsbusqueda.js
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
applicationmodelslibrosmodel.php
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 viewslibroslistar.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.
Ejecución

Con filtro:

Sin resultados:
Paginación en CodeIgniter
applicationmodelslibrosmodel.php

En la clase controlador applicationcontrollerslibros.php hay que cargar la
librería e inicializar los parámetros de configuración.
Detalle del libro
Model: applicationmodelslibrosmodel.php
View: applicationviewslibrosver.php
Controller:applicationcontrollerslibros.php
Javascript: jstabs.js

applicationmodelslibrosmodel.php

applicationcontrollerslibros.php
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: librariesCarro_Library.php
View: applicationviewslibroslistar.php
Controller:applicationcontrollerscesta.php
applicationcontrollerslibros.php
Javascript: jscesta.js
Libros favoritos
Model: applicationmodelslibrosmodel.php
View: applicationviewsusuariosfavoritos.php
Controller:applicationcontrollerslibros.php
Javascript: jsfavoritos.js

applicationmodelslibrosmodel.php
Registro de un usuario
Model: applicationmodelsciudadesmodel.php
View: applicationviewsusuariosaddform.php
Controller:applicationcontrollersusuarios.php
Javascript: jsusuarios_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
Genera el combo de ciudades mediante consulta a la base de datos
applicationmodelsciudadesmodel.php

Vuelve a pintar los datos en el componente
Comprobar email registro
Model: applicationmodelsusuariosmodel.php
View: applicationviewsusuariosaddform.php
Controller:applicationcontrollersusuarios.php
Javascript: jsusuarios_addform.js
En el evento onBlur del campo email se llama a la función comprobarEmail()
Javascript: jsusuarios_addform.js

applicationcontrollersusuarios.php
applicationmodelsusuariosmodel.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
Login usuario
Model: applicationmodelsusuariosmodel.php
View: applicationviewsusuariosloginform.php
Controller:applicationcontrollersusuarios.php
Javascript: jsusuarios_loginform.js

Javascript: jsusuarios_loginform.js
Autocompletado en campo de búsqueda por título y por tag
Model: applicationmodelslibrosmodel.php
View: applicationviewslibroslistar.php
Controller:applicationcontrollerslibros.php
Javascript: js jquery.autocomplete.js
jsbusqueda.js
jsbusqueda.js

applicationcontrollerslibros.php
Autocompletado en título

Autocompletado en tag
Usuarios activos
Model: applicationmodelsusuariosmodel.php
View: applicationviewslibroslistar.php
Controller:applicationcontrollersusuarios.php
Javascript: js usuarios_activos.js

js usuarios_activos.js

applicationcontrollersusuarios.php
applicationmodelsusuariosmodel.php
Filtro de libros por rango precio con la barra de desplazamiento
Model: applicationmodelslibrosmodel.php
View: applicationviewslibroslistar.php
Controller:applicationcontrollerslibros.php
Javascript: js usuarios_slider.js

js usuarios_slider.js

applicationcontrollerslibros.php

applicationmodelslibrosmodel.php
Cesta de la compra, con la posibilidad de actualizar la misma estableciendo la
cantidad para cada producto.
Librería: librariesCarro_Library.php
View: applicationviewscestaver.php
Controller:applicationcontrollerscesta.php
Libros en formato RSS
Model: applicationmodelslibrosmodel.php
View: applicationviewslibrosrss.php
Controller:applicationcontrollersfeed.php

applicationcontrollersfeed.php

applicationmodelslibrosmodel.php

applicationviewslibrosrss.php
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.
Comentarios de un libro por parte de usuarios registrados
Model: applicationmodelslibrosmodel.php
View: applicationviewslibroscomentar.php
Controller:applicationcontrollerslibros.php

applicationmodelslibrosmodel.php
Categorias,SubCategorias ,Canales RSS
Model: applicationmodelscategoriasrssmodel.php
View: applicationviewslibrosbusquedaRss.php
Controller:applicationcontrollersfeed.php
Categorias
applicationviewslibrosbusquedaRss.php

applicationcontrollersfeed.php
applicationmodelscategoriasrssmodel.php

Subcategorias
applicationviewslibrosbusquedaRss.php

applicationcontrollersfeed.php
applicationmodelscategoriasrssmodel.php

Canales
applicationviewslibrosbusquedaRss.php

applicationcontrollersfeed.php
applicationmodelscategoriasrssmodel.php
Mapa usuarios
Permite localizar en un mapa de google los usuarios registrados
Model: applicationmodelsusuariosmodel.php
View: applicationviewsusuariosmapa.php
Controller:applicationcontrollersusuarios.php

applicationcontrollersusuarios.php

applicationmodelsusuariosmodel.php
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
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.
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
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.*">
Listado de libros en flex con componente Datagrid

Buscar por titulo
Buscar por precio mediante slider
Componente slider y funciones
Galeria de imágenes
Obtener datos de un libro
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.
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.
Validaciones en el formulario
Actualizar un libro mediante double click sobre el Datagrid

Clase para encapsular los datos del libro
compLibro.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.
srcviewsLibroForm.mxml
Administración de Libros
srcscreensappscreensLibrosScreen.mxml
srcformsLibroForm.mxml
srcformsNuevoLibroForm.mxml

Registro de un libro con validaciones
Actualizar los datos de un libro
Eliminar un libro con confirmación

Subir imágenes de un libro
Eliminar las imagenes arrastrándolas a la papelera

Tags de un libro
Crear un nuevo tag
srcformsTagForm.mxml

Asignar un tag al libro mediante drag&drop
Eliminar un tag del libro mediante drag&drop
Comentarios

srcscreensappscreensComentariosScreen.mxml

Eliminación de comentarios con confirmación
Editoriales
srcscreensappscreensEditorialesScreen.mxml

Pantalla de login

srcscreensLoginScreen.mxml
Usuarios
srcscreensappscreensUsuariosScreen.mxml
Detalle de un Libro

srcformsLibroForm.mxml

Definimos el objeto librosService donde se declaran los métodos que
están definidos en la clase LibrosService
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}">
Eliminar mediante drag &drop desde la tabla libros_autores
Validaciones y formatos de datos en LibroForm
Listado de autores
srcscreensappscreensAutoresScreen.mxml
Autocompletado

Filtro por nombre de autor
Insertar/Modificar autor
srcformsAutorForm.mxml

Objeto autoresService
Validación
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
Biografia autor mediante tooltip
Se crea un nuevo componente que pinte la descripción dentro de la caja.
srccompbiografiaRenderer.mxml
srcscreensappscreensCustomToolTip.mxml
Galería de autores
srccompgaleriaAutores.mxml
srcdataautores.xml

Mais conteúdo relacionado

Mais procurados

PROGRAMACION ORIENTADA A OBJETOS
PROGRAMACION ORIENTADA A OBJETOSPROGRAMACION ORIENTADA A OBJETOS
PROGRAMACION ORIENTADA A OBJETOS
Mayri85
 

Mais procurados (20)

Basics of the Web Platform
Basics of the Web PlatformBasics of the Web Platform
Basics of the Web Platform
 
Fundamentos de Base de Datos
Fundamentos de Base de DatosFundamentos de Base de Datos
Fundamentos de Base de Datos
 
Como crear un diagrama de clases
Como crear un diagrama de clasesComo crear un diagrama de clases
Como crear un diagrama de clases
 
Ingresar y obtener información de base de datos con php a través de ajax arch-20
Ingresar y obtener información de base de datos con php a través de ajax arch-20Ingresar y obtener información de base de datos con php a través de ajax arch-20
Ingresar y obtener información de base de datos con php a través de ajax arch-20
 
Guia Practica Maquetación HTML5, CSS
Guia Practica Maquetación HTML5, CSSGuia Practica Maquetación HTML5, CSS
Guia Practica Maquetación HTML5, CSS
 
PROGRAMACION ORIENTADA A OBJETOS
PROGRAMACION ORIENTADA A OBJETOSPROGRAMACION ORIENTADA A OBJETOS
PROGRAMACION ORIENTADA A OBJETOS
 
Modelamiento con uml definiciones
Modelamiento con uml definicionesModelamiento con uml definiciones
Modelamiento con uml definiciones
 
Arquitectura 3 Capas
Arquitectura 3 CapasArquitectura 3 Capas
Arquitectura 3 Capas
 
Bases de datos orientadas a objetos
Bases de datos orientadas a objetosBases de datos orientadas a objetos
Bases de datos orientadas a objetos
 
Ejercicios básicos HTML
Ejercicios básicos HTMLEjercicios básicos HTML
Ejercicios básicos HTML
 
Java script
Java scriptJava script
Java script
 
Javascript
JavascriptJavascript
Javascript
 
jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 
Ajax ppt
Ajax pptAjax ppt
Ajax ppt
 
Desarrollo web
Desarrollo webDesarrollo web
Desarrollo web
 
NodeJS
NodeJSNodeJS
NodeJS
 
Curso css
Curso   cssCurso   css
Curso css
 
Django forms
Django formsDjango forms
Django forms
 
HTML5
HTML5HTML5
HTML5
 
Css3
Css3Css3
Css3
 

Semelhante a Proyecto web Php-MySQL-Ajax-Flex

Hands-on Spring 3: The next generation
Hands-on Spring 3: The next generationHands-on Spring 3: The next generation
Hands-on Spring 3: The next generation
Sergi Almar i Graupera
 
Novedades de aries
Novedades de ariesNovedades de aries
Novedades de aries
lmrv
 

Semelhante a Proyecto web Php-MySQL-Ajax-Flex (20)

Introducción a Kohana Framework
Introducción a Kohana FrameworkIntroducción a Kohana Framework
Introducción a Kohana Framework
 
Conociendo el Patron Modelo Vista Controlador
Conociendo el Patron   Modelo Vista ControladorConociendo el Patron   Modelo Vista Controlador
Conociendo el Patron Modelo Vista Controlador
 
Introduccion mvc
Introduccion mvcIntroduccion mvc
Introduccion mvc
 
AJAX EN CURSO PHP
AJAX EN CURSO PHPAJAX EN CURSO PHP
AJAX EN CURSO PHP
 
Guía resumen JavaScript
Guía resumen JavaScriptGuía resumen JavaScript
Guía resumen JavaScript
 
Ajax
AjaxAjax
Ajax
 
Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3
 
Ajax
AjaxAjax
Ajax
 
Programacion MVC.net
Programacion MVC.netProgramacion MVC.net
Programacion MVC.net
 
Ajax
AjaxAjax
Ajax
 
Presentacion ajax
Presentacion   ajaxPresentacion   ajax
Presentacion ajax
 
Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......
 
Práctica web de la sesión 8_Velador Rocha.pdf
Práctica web de la sesión 8_Velador Rocha.pdfPráctica web de la sesión 8_Velador Rocha.pdf
Práctica web de la sesión 8_Velador Rocha.pdf
 
Google apps engine
Google apps engineGoogle apps engine
Google apps engine
 
Práctica web de la sesión 5_Velador Rocha.pdf
Práctica web de la sesión 5_Velador Rocha.pdfPráctica web de la sesión 5_Velador Rocha.pdf
Práctica web de la sesión 5_Velador Rocha.pdf
 
Práctica web de la sesión 5_Velador Rocha.pptx
Práctica web de la sesión 5_Velador Rocha.pptxPráctica web de la sesión 5_Velador Rocha.pptx
Práctica web de la sesión 5_Velador Rocha.pptx
 
Manual De Ajax En Espanol
Manual De Ajax En EspanolManual De Ajax En Espanol
Manual De Ajax En Espanol
 
Hands-on Spring 3: The next generation
Hands-on Spring 3: The next generationHands-on Spring 3: The next generation
Hands-on Spring 3: The next generation
 
Tutorial de cakePHP itst
Tutorial de cakePHP itstTutorial de cakePHP itst
Tutorial de cakePHP itst
 
Novedades de aries
Novedades de ariesNovedades de aries
Novedades de aries
 

Mais de Jose Manuel Ortega Candel

Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments- All day devops Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments- All day devops
Jose Manuel Ortega Candel
 

Mais de Jose Manuel Ortega Candel (20)

Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfAsegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
 
PyGoat Analizando la seguridad en aplicaciones Django.pdf
PyGoat Analizando la seguridad en aplicaciones Django.pdfPyGoat Analizando la seguridad en aplicaciones Django.pdf
PyGoat Analizando la seguridad en aplicaciones Django.pdf
 
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
 
Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments- All day devops Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments- All day devops
 
Evolution of security strategies in K8s environments.pdf
Evolution of security strategies in K8s environments.pdfEvolution of security strategies in K8s environments.pdf
Evolution of security strategies in K8s environments.pdf
 
Implementing Observability for Kubernetes.pdf
Implementing Observability for Kubernetes.pdfImplementing Observability for Kubernetes.pdf
Implementing Observability for Kubernetes.pdf
 
Computación distribuida usando Python
Computación distribuida usando PythonComputación distribuida usando Python
Computación distribuida usando Python
 
Seguridad en arquitecturas serverless y entornos cloud
Seguridad en arquitecturas serverless y entornos cloudSeguridad en arquitecturas serverless y entornos cloud
Seguridad en arquitecturas serverless y entornos cloud
 
Construyendo arquitecturas zero trust sobre entornos cloud
Construyendo arquitecturas zero trust sobre entornos cloud Construyendo arquitecturas zero trust sobre entornos cloud
Construyendo arquitecturas zero trust sobre entornos cloud
 
Tips and tricks for data science projects with Python
Tips and tricks for data science projects with Python Tips and tricks for data science projects with Python
Tips and tricks for data science projects with Python
 
Sharing secret keys in Docker containers and K8s
Sharing secret keys in Docker containers and K8sSharing secret keys in Docker containers and K8s
Sharing secret keys in Docker containers and K8s
 
Implementing cert-manager in K8s
Implementing cert-manager in K8sImplementing cert-manager in K8s
Implementing cert-manager in K8s
 
Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad(pycones)Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad(pycones)
 
Python para equipos de ciberseguridad
Python para equipos de ciberseguridad Python para equipos de ciberseguridad
Python para equipos de ciberseguridad
 
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodanShodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
 
ELK para analistas de seguridad y equipos Blue Team
ELK para analistas de seguridad y equipos Blue TeamELK para analistas de seguridad y equipos Blue Team
ELK para analistas de seguridad y equipos Blue Team
 
Monitoring and managing Containers using Open Source tools
Monitoring and managing Containers using Open Source toolsMonitoring and managing Containers using Open Source tools
Monitoring and managing Containers using Open Source tools
 
Python Memory Management 101(Europython)
Python Memory Management 101(Europython)Python Memory Management 101(Europython)
Python Memory Management 101(Europython)
 
SecDevOps containers
SecDevOps containersSecDevOps containers
SecDevOps containers
 
Python memory managment. Deeping in Garbage collector
Python memory managment. Deeping in Garbage collectorPython memory managment. Deeping in Garbage collector
Python memory managment. Deeping in Garbage collector
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (15)

Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 

Proyecto web Php-MySQL-Ajax-Flex

  • 1. Proyecto Php-MySQL-Ajax-Flex José Manuel Ortega Candel jmoc25@gmail.com
  • 2. Estructura del proyecto con CodeIgniter
  • 4. 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.
  • 6. Las librerías javascript que se usen en toda la aplicación se cargan en el fichero viewscabecera.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: applicationmodelslibrosmodel.php View: applicationviewslibroslistar.php Controller:applicationcontrollerslibros.php Javascript: jsbusqueda.js jsbusqueda.js
  • 7. 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 applicationmodelslibrosmodel.php
  • 8. 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 viewslibroslistar.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.
  • 10. Paginación en CodeIgniter applicationmodelslibrosmodel.php En la clase controlador applicationcontrollerslibros.php hay que cargar la librería e inicializar los parámetros de configuración.
  • 11. Detalle del libro Model: applicationmodelslibrosmodel.php View: applicationviewslibrosver.php Controller:applicationcontrollerslibros.php Javascript: jstabs.js applicationmodelslibrosmodel.php applicationcontrollerslibros.php
  • 12.
  • 13. 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: librariesCarro_Library.php View: applicationviewslibroslistar.php Controller:applicationcontrollerscesta.php applicationcontrollerslibros.php Javascript: jscesta.js
  • 14. Libros favoritos Model: applicationmodelslibrosmodel.php View: applicationviewsusuariosfavoritos.php Controller:applicationcontrollerslibros.php Javascript: jsfavoritos.js applicationmodelslibrosmodel.php
  • 15.
  • 16. Registro de un usuario Model: applicationmodelsciudadesmodel.php View: applicationviewsusuariosaddform.php Controller:applicationcontrollersusuarios.php Javascript: jsusuarios_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
  • 17. Genera el combo de ciudades mediante consulta a la base de datos applicationmodelsciudadesmodel.php Vuelve a pintar los datos en el componente
  • 18.
  • 19. Comprobar email registro Model: applicationmodelsusuariosmodel.php View: applicationviewsusuariosaddform.php Controller:applicationcontrollersusuarios.php Javascript: jsusuarios_addform.js En el evento onBlur del campo email se llama a la función comprobarEmail() Javascript: jsusuarios_addform.js applicationcontrollersusuarios.php
  • 20. applicationmodelsusuariosmodel.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
  • 21. Login usuario Model: applicationmodelsusuariosmodel.php View: applicationviewsusuariosloginform.php Controller:applicationcontrollersusuarios.php Javascript: jsusuarios_loginform.js Javascript: jsusuarios_loginform.js
  • 22.
  • 23. Autocompletado en campo de búsqueda por título y por tag Model: applicationmodelslibrosmodel.php View: applicationviewslibroslistar.php Controller:applicationcontrollerslibros.php Javascript: js jquery.autocomplete.js jsbusqueda.js jsbusqueda.js applicationcontrollerslibros.php
  • 25. Usuarios activos Model: applicationmodelsusuariosmodel.php View: applicationviewslibroslistar.php Controller:applicationcontrollersusuarios.php Javascript: js usuarios_activos.js js usuarios_activos.js applicationcontrollersusuarios.php
  • 27. Filtro de libros por rango precio con la barra de desplazamiento Model: applicationmodelslibrosmodel.php View: applicationviewslibroslistar.php Controller:applicationcontrollerslibros.php Javascript: js usuarios_slider.js js usuarios_slider.js applicationcontrollerslibros.php applicationmodelslibrosmodel.php
  • 28.
  • 29. Cesta de la compra, con la posibilidad de actualizar la misma estableciendo la cantidad para cada producto. Librería: librariesCarro_Library.php View: applicationviewscestaver.php Controller:applicationcontrollerscesta.php
  • 30. Libros en formato RSS Model: applicationmodelslibrosmodel.php View: applicationviewslibrosrss.php Controller:applicationcontrollersfeed.php applicationcontrollersfeed.php applicationmodelslibrosmodel.php applicationviewslibrosrss.php
  • 31.
  • 32. 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.
  • 33. Comentarios de un libro por parte de usuarios registrados Model: applicationmodelslibrosmodel.php View: applicationviewslibroscomentar.php Controller:applicationcontrollerslibros.php applicationmodelslibrosmodel.php
  • 34. Categorias,SubCategorias ,Canales RSS Model: applicationmodelscategoriasrssmodel.php View: applicationviewslibrosbusquedaRss.php Controller:applicationcontrollersfeed.php Categorias applicationviewslibrosbusquedaRss.php applicationcontrollersfeed.php
  • 38. Mapa usuarios Permite localizar en un mapa de google los usuarios registrados Model: applicationmodelsusuariosmodel.php View: applicationviewsusuariosmapa.php Controller:applicationcontrollersusuarios.php applicationcontrollersusuarios.php applicationmodelsusuariosmodel.php
  • 39.
  • 40.
  • 41. 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
  • 42. 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.
  • 43. 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
  • 44. 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.*">
  • 45. Listado de libros en flex con componente Datagrid Buscar por titulo
  • 46. Buscar por precio mediante slider Componente slider y funciones
  • 48. Obtener datos de un libro
  • 49. 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.
  • 50. 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.
  • 51. Validaciones en el formulario
  • 52.
  • 53. Actualizar un libro mediante double click sobre el Datagrid Clase para encapsular los datos del libro compLibro.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.
  • 56. Actualizar los datos de un libro
  • 57. Eliminar un libro con confirmación Subir imágenes de un libro
  • 58. Eliminar las imagenes arrastrándolas a la papelera Tags de un libro
  • 59. Crear un nuevo tag srcformsTagForm.mxml Asignar un tag al libro mediante drag&drop
  • 60. Eliminar un tag del libro mediante drag&drop
  • 64. Detalle de un Libro srcformsLibroForm.mxml Definimos el objeto librosService donde se declaran los métodos que están definidos en la clase LibrosService
  • 65. 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}">
  • 66. Eliminar mediante drag &drop desde la tabla libros_autores
  • 67. Validaciones y formatos de datos en LibroForm
  • 72. 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
  • 73.
  • 74. Biografia autor mediante tooltip Se crea un nuevo componente que pinte la descripción dentro de la caja. srccompbiografiaRenderer.mxml srcscreensappscreensCustomToolTip.mxml