SlideShare una empresa de Scribd logo
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

Más contenido relacionado

La actualidad más candente

Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
Antoine Rey
 
Apache Server Tutorial
Apache Server TutorialApache Server Tutorial
Apache Server Tutorial
Jagat Kothari
 
Php with MYSQL Database
Php with MYSQL DatabasePhp with MYSQL Database
Php with MYSQL Database
Computer Hardware & Trouble shooting
 
PHP MVC
PHP MVCPHP MVC
React & GraphQL
React & GraphQLReact & GraphQL
React & GraphQL
Nikolas Burk
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
Abdoulaye Dieng
 
Flask Introduction - Python Meetup
Flask Introduction - Python MeetupFlask Introduction - Python Meetup
Flask Introduction - Python Meetup
Areski Belaid
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menus
Lilia Sfaxi
 
Introduction To CodeIgniter
Introduction To CodeIgniterIntroduction To CodeIgniter
Introduction To CodeIgniter
Muhammad Hafiz Hasan
 
Jena Programming
Jena ProgrammingJena Programming
Jena Programming
Myungjin Lee
 
Web api
Web apiWeb api
Semantic web
Semantic webSemantic web
Semantic web
Myungjin Lee
 
ASP.NET Lecture 1
ASP.NET Lecture 1ASP.NET Lecture 1
ASP.NET Lecture 1
Julie Iskander
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
Syrine Ben aziza
 
INTRODUCTION TO IIS
INTRODUCTION TO IISINTRODUCTION TO IIS
INTRODUCTION TO IIS
sanya6900
 
Adobe Target
Adobe TargetAdobe Target
Adobe Target
Pankaj Kashyap
 
API : l'architecture REST
API : l'architecture RESTAPI : l'architecture REST
API : l'architecture REST
Fadel Chafai
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
Volkan Uzun
 
C# web api
C# web apiC# web api
C# web api
Simplilearn
 

La actualidad más candente (20)

Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Apache Server Tutorial
Apache Server TutorialApache Server Tutorial
Apache Server Tutorial
 
Php with MYSQL Database
Php with MYSQL DatabasePhp with MYSQL Database
Php with MYSQL Database
 
PHP MVC
PHP MVCPHP MVC
PHP MVC
 
React & GraphQL
React & GraphQLReact & GraphQL
React & GraphQL
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
 
Flask Introduction - Python Meetup
Flask Introduction - Python MeetupFlask Introduction - Python Meetup
Flask Introduction - Python Meetup
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menus
 
Introduction To CodeIgniter
Introduction To CodeIgniterIntroduction To CodeIgniter
Introduction To CodeIgniter
 
Jena Programming
Jena ProgrammingJena Programming
Jena Programming
 
Web api
Web apiWeb api
Web api
 
Semantic web
Semantic webSemantic web
Semantic web
 
ASP.NET Lecture 1
ASP.NET Lecture 1ASP.NET Lecture 1
ASP.NET Lecture 1
 
Codeigniter
CodeigniterCodeigniter
Codeigniter
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
 
INTRODUCTION TO IIS
INTRODUCTION TO IISINTRODUCTION TO IIS
INTRODUCTION TO IIS
 
Adobe Target
Adobe TargetAdobe Target
Adobe Target
 
API : l'architecture REST
API : l'architecture RESTAPI : l'architecture REST
API : l'architecture REST
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
C# web api
C# web apiC# web api
C# web api
 

Similar a Proyecto web Php-MySQL-Ajax-Flex

Introducción a Kohana Framework
Introducción a Kohana FrameworkIntroducción a Kohana Framework
Introducción a Kohana Framework
Jorge Iván Meza Martínez
 
Conociendo el Patron Modelo Vista Controlador
Conociendo el Patron   Modelo Vista ControladorConociendo el Patron   Modelo Vista Controlador
Conociendo el Patron Modelo Vista Controlador
lissette_torrealba
 
Introduccion mvc
Introduccion mvcIntroduccion mvc
Introduccion mvc
lissette_torrealba
 
Guía resumen JavaScript
Guía resumen JavaScriptGuía resumen JavaScript
Guía resumen JavaScript
vinceq
 
Ajax
AjaxAjax
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
jose luis barrientos
 
Ajax
AjaxAjax
Ajax
ousli07
 
Programacion MVC.net
Programacion MVC.netProgramacion MVC.net
Programacion MVC.net
Javier Tuñoque Gálvez
 
Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......
SaulSalinasNeri
 
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
FERNANDOSEBASTIANVEL
 
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
FERNANDOSEBASTIANVEL
 
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
FERNANDOSEBASTIANVEL
 
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 generationSergi Almar i Graupera
 
Tutorial de cakePHP itst
Tutorial de cakePHP itstTutorial de cakePHP itst
Tutorial de cakePHP itst
omicx
 
Novedades de aries
Novedades de ariesNovedades de aries
Novedades de arieslmrv
 

Similar 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
 

Más de Jose Manuel Ortega Candel

Herramientas de benchmarks para evaluar el rendimiento en máquinas y aplicaci...
Herramientas de benchmarks para evaluar el rendimiento en máquinas y aplicaci...Herramientas de benchmarks para evaluar el rendimiento en máquinas y aplicaci...
Herramientas de benchmarks para evaluar el rendimiento en máquinas y aplicaci...
Jose Manuel Ortega Candel
 
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
Jose Manuel Ortega Candel
 
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
Jose Manuel Ortega Candel
 
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...
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
 
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
Jose Manuel Ortega Candel
 
Implementing Observability for Kubernetes.pdf
Implementing Observability for Kubernetes.pdfImplementing Observability for Kubernetes.pdf
Implementing Observability for Kubernetes.pdf
Jose Manuel Ortega Candel
 
Computación distribuida usando Python
Computación distribuida usando PythonComputación distribuida usando Python
Computación distribuida usando Python
Jose Manuel Ortega Candel
 
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
Jose Manuel Ortega Candel
 
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
Jose Manuel Ortega Candel
 
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
Jose Manuel Ortega Candel
 
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
Jose Manuel Ortega Candel
 
Implementing cert-manager in K8s
Implementing cert-manager in K8sImplementing cert-manager in K8s
Implementing cert-manager in K8s
Jose Manuel Ortega Candel
 
Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad(pycones)Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad(pycones)
Jose Manuel Ortega Candel
 
Python para equipos de ciberseguridad
Python para equipos de ciberseguridad Python para equipos de ciberseguridad
Python para equipos de ciberseguridad
Jose Manuel Ortega Candel
 
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
Jose Manuel Ortega Candel
 
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
Jose Manuel Ortega Candel
 
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
Jose Manuel Ortega Candel
 
Python Memory Management 101(Europython)
Python Memory Management 101(Europython)Python Memory Management 101(Europython)
Python Memory Management 101(Europython)
Jose Manuel Ortega Candel
 
SecDevOps containers
SecDevOps containersSecDevOps containers
SecDevOps containers
Jose Manuel Ortega Candel
 

Más de Jose Manuel Ortega Candel (20)

Herramientas de benchmarks para evaluar el rendimiento en máquinas y aplicaci...
Herramientas de benchmarks para evaluar el rendimiento en máquinas y aplicaci...Herramientas de benchmarks para evaluar el rendimiento en máquinas y aplicaci...
Herramientas de benchmarks para evaluar el rendimiento en máquinas y aplicaci...
 
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
 

Último

Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
Fernando Villares
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
Leidyfuentes19
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
cristianrb0324
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
cj3806354
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
JulyMuoz18
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Telefónica
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
rafaelsalazar0615
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
samuelvideos
 
Ventajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloroVentajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloro
durangense277
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
DanielErazoMedina
 

Último (20)

Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
 
Ventajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloroVentajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloro
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 

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