Cas d’us de Framework web desenvolupat amb llibreries LliuresJordi Catà
El desenvolupament d’aplicacions web està sofrint una evolució constant, actualment apareixen multitut de frameworks de desenvolupament àgil. En aquesta xerrada esposarem el funcionament d’un framework web desenvolupat amb llibreries i components lliures, orientat a arquitectura Model Vista Controlador. El desenvolupament s’ha realitzat utilitzant les llibreries Pear::Dataobject (abstracció de la base de dades), Smarty (aïllament de PHP i HTML).
La pellicola Liquipel è la protezione per lo schermo del vostro dispositivo più avanzata presente sul mercato, completamente invisibile all’occhio umano, non modifica l’estetica e con la tecnologia Nano-Shock™ che dissipa l’impatto per salvare il vostro schermo, eviterete costose riparazioni.
Per qualsiasi riferimento sulla casa madre, potete visionare il sito www.liquipel.com
Cas d’us de Framework web desenvolupat amb llibreries LliuresJordi Catà
El desenvolupament d’aplicacions web està sofrint una evolució constant, actualment apareixen multitut de frameworks de desenvolupament àgil. En aquesta xerrada esposarem el funcionament d’un framework web desenvolupat amb llibreries i components lliures, orientat a arquitectura Model Vista Controlador. El desenvolupament s’ha realitzat utilitzant les llibreries Pear::Dataobject (abstracció de la base de dades), Smarty (aïllament de PHP i HTML).
La pellicola Liquipel è la protezione per lo schermo del vostro dispositivo più avanzata presente sul mercato, completamente invisibile all’occhio umano, non modifica l’estetica e con la tecnologia Nano-Shock™ che dissipa l’impatto per salvare il vostro schermo, eviterete costose riparazioni.
Per qualsiasi riferimento sulla casa madre, potete visionare il sito www.liquipel.com
Investeren is niet hetzelfde als beleggen. Investeren gaat over het delen in een avontuur. Het creëren van een project. Je moet daarvoor geen Marc Coucke zijn. Vandaag bestaan er tal van mogelijkheden om te co-investeren in een bedrijf, Vanaf 5 tot ettelijke 1000'en euro kan elke Vlaming steun verlenen aan een onderneming. Maar let wel: investeren is niet zonder risico en wie vanuit de luie zetel wil investeren, maakt best vooraf goed zijn of haar huiswerk. Daarover gaat dit event. Luc Colebunders (Active Capital) bespreekt de wettelijke mogelijkheden voor elk budget. Jan Lagast (Forte) geeft aan waarop te letten voor je met een bedrijf in zee gaat.
Un poco de la trayectoria y evolucion de uno de los programas mas faciles y utiles de la paqueteria Office , Power Point desde sus inicios hasta su evolucion
SimpleCRM's solution for Insurance industry consists of:
1. Multi Channel Lead Management System
2. Multi Channel Support Center System
3. Adviser portal & MI System
4. Integration with Core Insurance System
Saratoga CRM: Implementing Thin Client at Johnson Controls Inc.Aptean
Whether you're a small shop or a large enterprise, you'll find it worthwhile to hear about the 2800-user deployment of Saratoga Thin Client across JCI and gain firsthand insights into the lessons learned by two of the project leaders.
Espero que os sea de utilidad la presentación de la empresa a la que represento, en la que podrás ver los diferentes servicios que podemos prestar, desde la retirada y certificación de RAAES hasta traslados de CPD, incluyendo limpiezas técnicas de salas, a nivel nacional.
Investeren is niet hetzelfde als beleggen. Investeren gaat over het delen in een avontuur. Het creëren van een project. Je moet daarvoor geen Marc Coucke zijn. Vandaag bestaan er tal van mogelijkheden om te co-investeren in een bedrijf, Vanaf 5 tot ettelijke 1000'en euro kan elke Vlaming steun verlenen aan een onderneming. Maar let wel: investeren is niet zonder risico en wie vanuit de luie zetel wil investeren, maakt best vooraf goed zijn of haar huiswerk. Daarover gaat dit event. Luc Colebunders (Active Capital) bespreekt de wettelijke mogelijkheden voor elk budget. Jan Lagast (Forte) geeft aan waarop te letten voor je met een bedrijf in zee gaat.
Un poco de la trayectoria y evolucion de uno de los programas mas faciles y utiles de la paqueteria Office , Power Point desde sus inicios hasta su evolucion
SimpleCRM's solution for Insurance industry consists of:
1. Multi Channel Lead Management System
2. Multi Channel Support Center System
3. Adviser portal & MI System
4. Integration with Core Insurance System
Saratoga CRM: Implementing Thin Client at Johnson Controls Inc.Aptean
Whether you're a small shop or a large enterprise, you'll find it worthwhile to hear about the 2800-user deployment of Saratoga Thin Client across JCI and gain firsthand insights into the lessons learned by two of the project leaders.
Espero que os sea de utilidad la presentación de la empresa a la que represento, en la que podrás ver los diferentes servicios que podemos prestar, desde la retirada y certificación de RAAES hasta traslados de CPD, incluyendo limpiezas técnicas de salas, a nivel nacional.
A presentation on CakePHP, a few explanation about how it works and an example, written in Catalan.
Una presentació sobre CakePHP, breu explicació sobre les funcionalitats i un petit exemple, en català.
Per Josep Llodrà Grimalt.
http://herotyc.com
IT Academy s'adreça a totes aquelles persones que volen reconvertir-se o trobar feina en el món TIC, un dels sectors amb més projecció i millor remunerats. Per això s'han dissenyat dues tipologies de formació presencial per adaptar-se millor a les necessitats i objectius de les possibles participants.
Dentro del ciclo formativo de Administración de Sistemas Informáticos (FP de Informática), la asignatura de Implantación de Aplicaciones Informáticas de Gestión es la asignatura que más claramente entra en contacto con el mundo de la empresa. La novedad de como hemos enfocado la asignatura es en la utilitzación de software de gestión empresarial de código abierto. Ello ofrece múltiples ventajas para las empresas, y ayuda al desarrollo de la cultura del software libre.
Aquesta breu història descriu, d'una manera extremadament resumida, l'evolució dels diferents serveis de pàgines web de centre oferts per la XTEC, des dels seus inicis fins a avui. L'excusa és explicar els fets que varen portar a l'aparició d'Àgora.
Introducción a la Financiación alternativaJordi Catà
Introducción a la financiación Alternativo: Crowdlending, Crowdfunding de Recompensa, Crowdfunding Equity, Business Angels, Capital Riesgo, Initial Coin Offers, y cómo las empresas pueden tener otras vías de financiación
Finançament alternatiu per a empreses, IntroduccióJordi Catà
Introducció al finançament Alternatiu: Crowdlending, Crowdfunding de Recompensa, Crowdfunding Equity, Business Angels, Capital Risc, Initial Coin Offers, i com les empreses poden tenir altres vies de finançament
Jove Cambra Internacional de Girona Resum president 2009 Jordi Catà
Resumen de mi presidencia en Jove Cambra Internacional de Girona durante el 2009 en el que he realizado tareas de respresentación de la entidad, definición del plan estratégico del 2009, establecimiento de los objetivos y ejecución de los diferentes eventos de la entidad: Business Networking Event, Best Business Plan, cursos de formación,.
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundraJordi Catà
En esta charla realizada en el Joomla!Day 2013 Albacete, Hablo sobre Responsive, Adaptive , apps a nivel conceptual con el objetivo de diferenciar las diferentes técnicas para adaptar la web a los diferentes dispositivos.
El incremento de acceso a webs vía dispositivos móviles está en aumento. El ratio de conversión de compras vía app desde tableta es más alto que vía ordenador. Las webs tienden a ser multidispositivo: la misma web se puede visualizar en ordenador, móvil, tablet, Smart TV.
Presentación sobre Proyectos realizados en Eshow 2012 en Madrid, donde se presentan soluciones que van más allà de las funcionalidades estandars de Joomla y Virtuemart
Presentación sobre Proyectos realizados en Joomla en el Joomla!Day 2012 Spain en Mérida.
Se presentan varios proyectos desde webs corporativas, hasta adaptaciones avanzadas de Ecommerce en Joomla, Integración con ERPs, etc.
Conferencia Joomla y Comercio Electrónico: Ecommretail 2011Jordi Catà
Conferencia sobre Joomla! Y Comercio Electrónico: Virtuemart, Integración de Sistemas con Joomla, Virtuemart y como se puede integrar con diferentes aplicaciones externas: CRM, Tracking, etc.
Joomla!day2010 Valencia - Joomla! casos de exitoJordi Catà
Conferencia en el Joomla!day2010 Valencia hablando sobre casos de éxito en Joomla! donde presentamos varios proyectos realizados por WebActualizable.com: desde Webs Corporativas, Comercio electrónico, desarrollo de extensiones, etc
Joomla!Day Spain Barcelona, Joomla! para todo tipo de proyectosJordi Catà
Con Joomla! se pueden construir desde webs personales hasta webs corporativas, portales, etc. entre otros: Web Presenciales, Web Corporativas, Reservas Online, Diarios online, publicaciones, Portales comunitarios, Web de Organitzaciones no lucrativas, Web de Escuelas, Web Personales, Web de Turisme, Redes sociales, Intranets, Extranets. En esta conferéncia-taller, veremos lo que Joomla! nos puede aportar para la construcción de websites.
1. www.dunlock.com
Framework Web
desenvolupat amb llibreries lliures
Jordi Catà Castillo - jordi.cata@dunlock.com
ASSL Party 2009 – 10 de Febrer
Escola Universitària Politècnica de Mataró
2. Taula de continguts
Objectius de la xerrada
Antecedents
Què és un Framework ? Objectius
Introducció Arquitectura Model-Vista-Controlador (disseny 3 capes)
Llibreries abstracció de la base de dades (Pear::DataObject) ->
Model
Llibreries separació lògica de negoci de HTML (Smarty) -> Vista
Funcionamnet del Controlador
Framework: Com ajuntemt Model, Vista, Controllador ?
Exemple
Altres Frameworks MVC lliures
ASSL Party, EUPMT'09, Framework Web: desenvolupat amb llibreries Lliures
3. Objectius de la Xerrada
Veure algunes llibreries estandars que ens permeten organitzar
el codi de maneres més “interessants” per arribar a tenir un codi
escalable, mantenible, robust, etc.
Exemple “adaptat” d'arquitectura Model – Vista – Controlador
Entendre el que és un framework i que ens pot aportar.
Algunes Llibreries com:
-Smarty: Motor de plantilles que ens permet separar l'HTML del
PHP.
-Pear Dataobject: Classes que ens permet “abstreure/encapsular”
la base de dades d'una forma cómode.
Exemples de funcionament del Framework desenvolupat a Dunlock
ASSL Party, EUPMT'09, Framework Web: desenvolupat amb llibreries Lliures
4. Antecedents
Que és/pot ser desenvolupar en PHP ?
- Programació sense ordre, sense cap tipus “d'enginyeria”
- Les modificacions en el codi son lentes.
- La reutilització de codi és fa pràcticament impossible.
- Codi rebuscat -> codi Spaggethi
Desenvolupament d'aplicacions des del punt de vista de
l'Enginyeria del Software garanteixen:
- Manteniment
- Escalabilitat
- Reutilització
- Robustesa i Lliure d'errors
-> Estructurar el codi a 3 nivells per tal de facilitar aquests punts.
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
5. Framework, què és ?
Un framework pot ser considerat com el conjunt de processos i
tecnologies utilitzats per a resoldre problemes complexes.
Un framework és un espai de treball on s'intenta automatitzar
tasques repetitives i s'assumeixen uns convenis de
desenvolupament.
Son dissenyats amb l'intent de facilitar el desenvolupament de
Software, encapsulant detalls de baix nivell i permetent enfocar-
nos en les funcionalitats importants.
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
6. Framework, què és ?
Ara bé, hi ha un debat obert amb que el us de frameworks
afegeix codi innecessari en el projecte, son pesats d'execució, no
son escalables, etc.
-> Que és més important centrar-se en detalls de baix nivell o
centrar-se en funcionalitats d'alt nivell ?
Opinió personal: Per la meva part prefereixo treballar a alt
nivell i aprofitar llibreries existents, framework que m'encapsulin
el baix nivell, i centrar-me amb funcionalitats
desenvolupament ràpid -> - cost -> + benefici + robustesa
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
7. Framework, objectius
Enfocat per facilitar i automatitzar les tasques que son
repetitives:
Alta
●
●Baixa
●Modificació
●Llistat
●Saber on hem de “tocar” per afegir funcionalitats a l'aplicació
Per exemple si hem de crear una nova Gestió de Factures:
●
hem de crear un nou Model, Acció i template (sinó és generic)
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
8. Disseny 3 capes
Físic
Negoci
HTML + Smarty Tags
Presentació
HTML + JavaScript
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
9. Disseny 3 capes
- Física: formada per la llibreria Pear i les classes que accediran a les dades,
garantint la independència del Sistema Gestor de Bases de Dades.
- Negoci: s'encarrega de gestionar, manipular les dades que li passa la capa física.
- Presentació: presenta les dades a la interfície d'usuari. Utilitza les llibreries
Smarty.
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
10. Arquitectura Model – Vista - Controlador
MODEL
Petició
CONTROLLER
VISTA
Resposta
Controlador: Respón als events d'un usuari i executa els models
necesaris i mostra les vistes que han de presentar les dades.
Model: Es la representació específica de la informació. Un model es pot
encarregar de calcular el preu d'una compra, afegir un nou usuari, etc
Vista: Presenta el model en un format adecuat, habitualment es la
interficie d'usuari, en el cas web per exemple HTML, XML, etc.
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
11. Arquitectura Model – Vista - Controlador
Petició
VISTA
CONTROLLER
Resposta
Smarty
ACCIO MODEL
HTML
Base dades
Pear::DataObject
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
12. Llibreries Bàsiques del Framework
Per tal d'explicar el funcionament del framework, explicarem les capes
d'accés a dades (Física) i la capa de presentació.
Presentació/Vista: Smarty
-separació de PHP del HTML
Física/Model: PEAR::DataObject
-generació de classes de mapping base de dades
-us d'aquests models
VISTA
CONTROLLER
Anem a veure com funcionen per
Smarty
Separat
MODEL
HTML
Base dades
Pear::DataObject
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
13. Presentació/Vista: Smarty
Petició
VISTA
CONTROLLER
Resposta
Smarty
MODEL
HTML
Base dades
Pear::DataObject
ASSL Party, EUPMT'09, Framework Web: desenvolupat amb llibreries Lliures
14. Presentació/Vista: Smarty
Smarty: motor de plantilles fàcilment extensible via plugins. Ens permet separar
l'HTML del codi PHP
Format per Tags que dins plantilla/fitxer HTML ens indiquen els paràmetres a
substituir.
Variables instanciades des de PHP: {$variable}
Constants instanciades des de fitxer de configuració: {#constant#}
Estructures de Control: {if}{/if}, {section} {/section}
Template: HTML + Smarty Tags
Smarty PHP
Sortida: HTML
smarty.php.net
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
15. Presentació/Vista: Smarty, per què ?
Permet separar la informació (dades) de la forma en que es mostra.
Permet Separar les capes de negoci i Física de la presentació, Smarty
només s'encarrega de mostrar la informació
Permet gestionar funcionalitats a nivell de Smarty sense programar
en PHP.
Permet accedir a variables de Sessio, Post, Get, Constants de PHP:
$smarty.session.VARIABLE
●
●$smarty.post.VARIABLE
●$smarty.get.VARIABLE
●$smarty.const.CONSTANT
Altres ...
Sortida: HTML
smarty.php.net
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
16. Presentació/Vista: Smarty Instal·lació
Instal·lació Smarty, última versió 2.6.22
http://smarty.net/
Descomprimim el paquet dins de libs/
obtenim:
libs/internals
libs/plugins
libs/Smarty_Compiler.class.php
libs/Smarty.class.php
Sortida: HTML
smarty.php.net
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
17. Presentació/Vista: Smarty Configuració
Smarty requereix dels directoris per poder treballar:
projecte/templates
●
●projecte/templates_c
●projecte/config
-templates: directori on tenim els fitxers de “plantilles”.
-templates_c: directori on es “compila” les plantilles per poder-se
“executar” de forma ràpida
-config: directori on troba fitxers de configuració (constants smarty)
Es important tenir permisos 777 ( a+wrx) en templates_c
Sortida: HTML
smarty.php.net
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
21. Presentació/Vista: Smarty modificadors
Projecte/templates/main.tpl
<html>
<head><title>{$TITTLE|default:Intranet}</title></head>
<body>
Hola: {$NOM|truncate:10|upper}<br>
{$smarty.now|date_format:quot;%d-%m-%Yquot;}
</body>
</html>
Objectius dels modificadors -> aplicar conversions a les variables
d'smarty a nivell de plantilla (no a nivell de PHP)
Sortida: HTML
smarty.php.net
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
22. Presentació/Vista: Smarty, IF
La sentència IF d'smarty es molt similar a la sentencia IF de PHP.
La seva sintaxis és:
{if condicio}
codi a mostrar si es compleix la condició
{elseif condicio2}
codi a mostrar si es compleix la condició 2
{/if}
Exemples
{if $NOM == “Josep”} Soc en Josep
{elseif $NOM == “Jordi”} Soc en Jordi
{/if}
{if $NOM == “Josep” || $NOM == “Jordi”} Soc en Josep o en Jordi
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
23. Presentació/Vista: Smarty, Exemple 2 IF
{if $USUARI_ADMIN} Ets un admin
plantilla.tpl {else} Usuari normal
{/if}<br>
Nom: {$NOM}<br>
Cognom: {$COGNOM}
$smarty = new Smarty_template ;
prova.php $smarty->assign (“USUARI_ADMIN”, true);
$smarty->assign (“NOM”, “Josep”);
$smarty->assign (“COGNOM”, “Foix”);
$smarty->display (“plantilla.tpl”);
<html>
<body>
Ets un admin
Sortida
Nom: Josep<br>
Cognom: Cognom
</body>
</html>
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
24. Presentació/Vista: Smarty, Section
La sentència SECTION d'smarty es molt similar a la sentencia FOR de
php.
La seva sintaxis és:
{section name=INDEX loop=$DADES}
mostrem dada actual[INDEX]
{/section}
Exemples
plantilla.tpl
{section name=line loop=$DADES}
<br>
{$DADES[line].nom}, {$DADES[line].cognom}
{/section}
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
26. Presentació/Vista: Smarty, constants
Smarty permet carregar “constants” directament a les plantilles, a través
del tag {#NOM_CONSTANT#}. Aquests fitxers son interessants pel tema
d'idiomes...
Per exemple
{#NOM#}
Aquestes constants es troben dins dels fitxers ubicats en /projecte/config/,
per exemple:
/projecte/config/catala.conf
NOM = “Nom”
Per indicar a Smarty que carregi un d'aquest fitxers en la plantilla s'utilitza
plantilla.tpl
{config_load file=”catala.conf”}
{#NOM#}: {$NOM}
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
28. Presentació/Vista: Smarty, includes
El funcionament es similar a la comanda include de php, ens permet
incloure el codi html d'un altre fitxer.
La sintaxis es la següent:
{include file='NOM_PLANTILLA.tpl'}
Per exemple
plantilla.tpl peu_pagina.tpl
<body>
Nom {$NOM}, Cognom: {$COGNOM}
<div align=”center”> Peu de pàgina </div>
{include file=”peu_pagina.tpl”}
</body>
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
30. Presentació/Vista: Smarty, Session, Get, Post
Smarty permet gestionar la informació de
$_SESSION
●
●$_POST
●$_GET
●Constants de PHP
{if $smarty.const.ADMINISTRADOR == $smarty.session.GRUPUSUARI}
Es usuari administrador
{else if $smarty.constant.REGISTRAT == $smarty.session.GRUPUSUARI}
Es registrat
{/if}
{if $smarty.get.ACCIO == “Afegir”}
Estem Afegint -> Mostrem formular d'afegir
{else}
Estem llistant -> mostrem llistat
{/if}
aillar la presentació del negoci !!!
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
31. Presentació/Vista: Smarty
Que hem vist ?
-Com utilitzar Smarty per separar el PHP de l'HTML
-Exemples d'us
Dins el nostre Framework amb Smarty mostrem la informació que ens arriba
des del Model a través del Controller
Petició
VISTA
CONTROLLER
Resposta
Smarty
MODEL
HTML
Base dades
Pear::DataObject
ASSL Party, EUPMT'09, Framework Web: desenvolupat amb llibreries Lliures
32. Física/Model: PEAR::DataObject
Petició
VISTA
CONTROLLER
Resposta
Smarty
MODEL
HTML
Base dades
Pear::DataObject
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
33. Física/Model: PEAR::DataObject
Pear :PHP Extension and Aplication Repository, és un framework i sistema de
distribució per crear components de PHP reutilitzables.
D'entre d'altres funcionalitats destaquem la d'independitzar i encapsular la base de
dades:
-Mysql
-Postgres
-Oracle
-Sqlite
- ...
pear.php.net
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
34. Física/Model: PEAR::DataObject
Dataobject permet utilitzar “objectes” per poder treballar amb les
diferents taules de la base de dades.
Per exemple:
$usuari = DB_DataObject::factory('tusuaris');
$usuari->NOM = “Pepet”;
$usuari->insert ();
Per tal de poder treballar d'aquesta forma cal generar les classes
que mapeigen les taules de la base de dades.
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
35. Física/Model: PEAR::DataObject: Instal·lació
http://pear.php.net
Descarregem el paquet DataObject i el descomprimim a:
libs/
en el nostre codi haurem de fer Includes a aquestes
llibreries
include_once quot;libs/DB/DataObject.phpquot;;
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
36. Física/Model: PEAR::DataObject: Instal·lació
Creem la base de dades: test_db
Creem la taula usuaris
CREATE TABLE IF NOT EXISTS `usuaris` (
`id` int(11) NOT NULL,
`nom` varchar(255) NOT NULL,
`cognom` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Anem a generar les classes per “Mapeijar” les taules de la BD.
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
38. Física/Model: PEAR::DataObject: Generació
El generador ens genera classes dins de classes/dbmapping/
<?php
class DataObjects_Usuaris extends DB_DataObject
{
###START_AUTOCODE
public $__table = 'usuaris'; // table name
public $id; // int(11) not_null primary_key
public $nom; // string(255) not_null
public $cognom; // string(255) not_null
/* Static get */
function staticGet($k,$v=NULL) {
return DB_DataObject::staticGet('DataObjects_Usuaris',$k,$v); }
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
}
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
39. Física/Model: PEAR::DataObject
Exemple 1: select
$usuari = DB_DataObject::factory(quot;tusuarisquot;)
$usuari->find();
->executa quot;SELECT * FROM tusuarisquot;;
$usuari = DB_DataObject::factory(quot;tusuarisquot;)
$usuari->USUARI = quot;nom_usuariquot;;
$usuari->CLAU = quot;contrasenyaquot;;
$usuari->find();
->executa quot;SELECT * FROM tusuaris where
USUARI = quot;nom_usuariquot; AND CLAU = quot;contrasenyaquot;;
$usuari = DB_DataObject::factory(quot;tusuarisquot;)
$usuari->find();
while ($usuari->fetch ())
{
echo quot;<br> nom usuari: quot; .$usuari->NOM_USUARI;
}
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
41. Física/Model: PEAR::DataObject
Exemple 3: update, setFrom
update
$usuari = DB_DataObject::factory(quot;tusuarisquot;)
$usuari->get(1); -> SELECT * FROM tusuaris WHERE CODI_USUARI = 1
$usuari->CLAU = “1234”;
$usuari->update ();
->UPDATE tusuaris SET CLAU = '1234' WHERE CODI_USUARI = 1 AND NOM = 'Pepet' AND
COGNOM = 'Boch' AND USUARI = 'pboch';
setFrom
assigna de forma automàtica valors del REQUEST a camps de l'objecte Dataobject
$usuari = DB_DataObject::factory(quot;tusuarisquot;)
$usuari->setFrom ($_REQUEST);
$usuari->insert ();
--> INSERT INTO tusuaris (NOM, COGNOM)
VALUES (NOM_INTRODUIT, COGNOM_INTRODUIT)
}
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
42. Física/Model: PEAR::DataObject
Exemple 4: delete, order By
delete
$usuari = DB_DataObject::factory(quot;tusuarisquot;)
$usuari->USUARI = “pboch”;
$usuari->delete ();
->DELETE FROM tusuaris WHERE USUARI = 'pboch';
orderBy
$usuari = DB_DataObject::factory(quot;tusuarisquot;)
$usuari->orderBy (“NOM, COGNOM”);
$usuari->find ();
->SELECT * FROM tusuaris order by NOM, COGNOM
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
43. Física/Model: PEAR::DataObject Model
Exemple 5: getLink
retorna el registre relacionat d'una altra taula.
Creem una nova Taula:
CREATE TABLE IF NOT EXISTS `adreces` (
`id` int(11) NOT NULL auto_increment,
`adreca` varchar(255) NOT NULL,
`id_usuari` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM ;
Generem els Dbmapping
php libs/DB/DataObject/createTables.php config/generate_do.ini
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
44. Física/Model: PEAR::DataObject Model
Exemple 6: whereAdd
$person->name = quot;testquot;;
$person->whereAdd(quot;name like '%test%quot;);
$person->whereAdd(quot; edat > 24”);
$total = $person-
>count(DB_DATAOBJECT_WHEREADD_ONLY);
echo quot;There are {$total} names in the databasequot;;
SELECT count(person.id) AS DATAOBJECT_NUM
FROM person
WHERE name like '%test%' AND edat > 24;
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
45. Física/Model: PEAR::DataObject Model
Altres métodes
Altres métodes
Limit -> SELECT * FROM usuaris LIMIT 0,30
GroupBy
escape
Count
joinAdd -> per fer joins entre dos objectes dataobject
toArray -> converteix un objecte a array
validate -> comprova que els camps de l'objecte tingui valors vàlids
DB_DataObject::debugLevel(5); -> IMPORTANTISIM Per Debugar
Dataobject !!!
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
46. Física/Model: PEAR::DataObject Model
Que hem vist ?
-Com utilitzar Dataobject per encapsular accés a DB.
-Exemples d'us
Dins el nostre Framework amb DataOBject encapsulem les gestions amb la
base de dades, etc
Petició
VISTA
CONTROLLER
Resposta
Smarty
MODEL
HTML
Base dades
Pear::DataObject
ASSL Party, EUPMT'09, Framework Web: desenvolupat amb llibreries Lliures
47. MVC: El Controlador
Petició
VISTA
CONTROLLER
Resposta
Smarty
MODEL
HTML
Base dades
Pear::DataObject
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
48. MVC: El Controlador, funcionament
Respon als events d'un usuari i executa els models necessaris i mostra les vistes que
han de presentar les dades.
Donada una petició sap quina Acció hem d'executar, quina vista i quin template hem
de mostrar
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
49. MVC: El Controlador, funcionament
Respon als events d'un usuari i executa els models necessaris i mostra les vistes que
han de presentar les dades.
De forma simple el controller té una lògica com:
switch ($_REQUEST[‘action’])
{
case ‘llibre’: $action_class = ‘Llibre’; break;
case ‘user’: $action_class = ‘User’; break;
case ‘show’:
default: $action_class = ‘Inici’;
}
require_once ‘actions/’.$action_class.’.php’
$action = $ACTION_FACTORY->factory ($action_class);
$action->Perform();
$vista = $VIEW_FACTORY->factory (“VISTA_A_MOSTRAR”);
$vista->Show($action);
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
50. MVC: El Controlador: Funcionament
ListUsuarislAction
Petició
CONTROLLER APPLICATION
FRONTAL CONTROLLER
GenericaView
Resposta
tpl_llista.php
Es crida a partir de la URL:
http://servidor/controller.php?page=ListUsuariAction
$actions = array
(
array(“GestionHotelActionquot;, quot;LlistatGenericaViewquot; , quot;tpl_lista.phpquot;),
),
);
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
51. MVC: El Controlador: Application controller
Application Controller classes/utils/inc_controller.php
class Controller
{
public function Exec()
{
//Get the action to exec
$ACTION_FACTORY = &singleton::getInstance ('ActionFactory');
$action = $ACTION_FACTORY->factory ($this->actions[$key]);
$action->Perform();
//Get the view and show it
$VIEW_FACTORY = &singleton::getInstance ('ViewFactory');
$view = $VIEW_FACTORY->factory ($this->views[$key]);
$view->SetTemplate ($this->templates[$key]);
$view->Show($action);
}
}
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
52. DMVC: Convenis
Estructura de Directoris
Model: accés a la Base de dades, consultes, etc, sempre la informació es
retorna via toArray() o array d'objectes
Plantilla: mostrar la informació, conversions de la informació, etc
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
54. El “Framework”, Pasos
Configuració del Framework
-> configurar la base de dades
-> Generació de dbmappings -> PEAR::Dataobject
-> creació controller.php -> definició de models,vistes i templates
-> creació de model
-> creació de vista i template
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
55. El “Framework”, configuració base de dades
config/config.php
define('HOSTNAME_DB', “servidor_base_de_dades”);
define('DATABASE', “nom_base_de_dades”;
define('USERNAME_DB', “usuari_base_de_dades”);
define('PASSWORD_DB', “password_base_de_dades”);
Generació DBMAPPINGS
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
56. El “Framework”, configuració controller
Controller.php
include_once 'config/config.php';
include_once 'config/path.php';
include_once 'config/includes.php';
-> estem a punt per treballar amb el framework
$actions = array
(
array(“ListUsuariActionquot;, quot;GenericaViewquot; , quot;tpl_lista.phpquot;),
array(“UsuariActionquot;, quot;GenericaViewquot;, quot;tpl_form.phpquot; ),
);
$CONTROLLER = &singleton::getInstance ('Controller');
$CONTROLLER->SetActionMap ($actions);
$CONTROLLER->Exec ();
--> Executarà l'accio a realitzar i després passarà dades a la Vista corresponent
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
57. El “Framework”, convenis
Cada Capa s'encarrega de controlar que la informació que té es correcte, i
la informació que torna es correcte
classes/action/ListNomAccioAction.php -> Llistat de Dades
classes/action/NomAccioAction.php -> Acció de Alta/Baixa/Modificació
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
58. El “Framework”, Classes
S'encarrega de gestionar el que
Process hem de fer: insert, delete,
update, filtres, etc
S'encarregen de configurar
ListUsuarisAction UsuariAction quines taules gestionen
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
59. el “Framework”: Acció i Model
classes/action/ListUsuarisAction.php
class ListUsuarisAction extends Process
{
protected $dataobject = quot;NOM_CLASSE_MAPPEIG_TAULAquot;;
}
Es crida a partir de la URL:
http://servidor/controller.php?page=ListUsuarisAction
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
60. el “Framework”: Acció i Model
classes/dbampping/NOM_CLASSE_MAPPEIG_TAULA.php
Definició dels camps dels formularis, cercadors i llistats
public $generate_list_array;
public $generate_search_array;
public $generate_form_array;
$this->generate_list_array =
$this->generate_search_array =
$this->generate_form_array = array (
array(quot;idquot;,quot;Idquot;,quot;textquot;),
array(quot;nomquot;,quot;Nomquot;,quot;textquot;),
array(quot;cognomquot;,quot;Cognomquot;,quot;textquot;),
);
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
61. el “Framework”: Acció i Model
classes/dbampping/NOM_CLASSE_MAPPEIG_TAULA.php
public function gets ()
{
$this->orderBy (quot;cognom, nomquot;);
$this->find ();
$data = array();
while ($this->fetch ())
{
$data[] = clone ($this); // -> retornem la informació
//per Array d'objectes
}
return $data;
}
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
62. el “Framework”: Accions
classes/action/Process.php
class Process
{
function PrepareData () //prepara dades per a mostrar un formulari
//per afegir un nou registre
function getData ($id) //obte les dades del registre per mostrar
//un formulari per modificar registre
function Add () //s'encarrega de afegir un nou registre
function Update ($id_hotel) //s'encarrega d'actualizar el registre
function Delete ($id_hotel) //esborrar el registre
function Gets () //retorna la llista de registres
function Perform () //s'encarrega de gestionar el que hem de fer
function AplySearchParameters () //s'encarrega de filtrar
}
Els mètodes es criden de forma automàtica per la classe Process segons els
parametres de la URL, per exemple:
http://servidor/controller.php?page=UsuariAction&type=add
http://servidor/controller.php?page=UsuariAction&type=mod&id=9198
http://servidor/controller.php?page=UsuariAction&type=del&id=9198
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
63. el “Framework”: Accions
classes/action/Process.php
class Process
{
function Perform () //s'encarrega de gestionar el que hem de fer
{
switch ($action)
{
case ADD: //mostrem formulari i afegim
case MOD: //mostrem formulari i editem
case DEL: //esborrem
case VIEW:
default: //mostrem llistat amb el cercador
}
}
}
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
64. el “Framework”: Accions
<?php
class UsuariAction extends Process
{
public $title = quot;Userquot;;
protected $dataobject = quot;usuarisquot;;
protected $redirect;
public function __construct ()
{
$this->redirect = URL_PAGE_CONTROLLER .quot;ListUsuarisAction&type=quot; .VIEW;
}
function Add () // per afegir per defecte un grup d'usuari
{
$_REQUEST[“PERMISOS”] = 3;
return parent::Add ();
}
}
?>
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
65. el “Framework”: Accions
<?php
class UsuariAction extends Process
{
public function Add ()
{
$_REQUEST[quot;grupquot;] = CLIENT;
$_REQUEST[quot;passwordquot;] = md5($_REQUEST[quot;passwordquot;]);
return parent::Add ();
}
public function Update ($id)
{
$_REQUEST[quot;passwordquot;] = md5($_REQUEST[quot;passwordquot;]);
return parent::Update ($id);
}
}
?>
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
66. el “Framework”: templates
Template per defecte:
tpl_main.php
{include tpl_menu.php} Mostra el menu en funció de l'usuari
{include file=$TEMPLATE_CONTENT_FILE}
tpl_search.php
tpl_list.php
Genera un llistat amb el cercador integrat
tpl_form.php
Genera un formulari d'afegir/modificar donat els parametres dels camps del
DBMapping
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
67. el “Framework”: permisos
Container: Usuaris -< Grups -< Permisos
S'encarrega de donat el grup de l'usuari controlar si pot executar l'acció o no.
CONTAINER
CONTAINER
ListUsuarislAction
CONTROLLER APPLICATION
FRONTAL GenericaView
CONTROLLER
tpl_llista.php
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
68. el “Framework”: permisos, Container
Container: Usuaris -< Grups -< Permisos
S'encarrega de donat el grup de l'usuari controlar si pot executar l'acció o no.
id grup accio
1 1 ListArticleAction
2 1 ListClientAction
3 1 ListTipusIncidenciaAction
4 1 ListUsuariAction
5 1 ListOperariAction
8 1 ListIncidenciaExternaAction
$ACTION_FACTORY = &singleton::getInstance ('ActionFactory');
$container = $ACTION_FACTORY->factory (quot;ContainerActionquot;);
$container->Perform();
$usuari = new Usuaris;
$REQUEST = &singleton::getInstance ('Request');
$page = $REQUEST->Get(quot;pagequot;);
if (CHECK_PERMISION && !$usuari->TeAccesMenu ($page)) return false;
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
69. el “Framework”: Millores
Automatizació de relacions 1:N, N:M
Creació de Filtres en el Frontal Controller per exemple
HtmlCommentFilter
per poder filtar continguts, preprocessar/postprocessar dades.
Generació de codi de funcionalitats: Alta, Baixa, Modificació, llistat de
Registre, paginació de llistats, etc
Creació de sistema de “plugins” per poder extendre funcionalitats de
forma ràpida.
Integració fàcil d'AJAX a nivell de framework.
Publicar el Framework en Sourceforge
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
70. Frameworks MVC Lliures
Hi ha multitud de Frameworks lliures en diferents tecnologies com poden ser:
PHP:
-Symfony
-CakePHP
-Akelos
-...
Python:
-Django
-Pylons
-Zope
-...
Ruby on Rails
Java
-Seam
-LifeRay
ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures
ASSL Party, EUPMT'09,
71. Gràcies per la vostra assistencia
Framework Web
desenvolupat amb llibreries lliures
www.dunlock.com
Jordi Catà Castillo - jordi.cata@dunlock.com
ASSL Party 2009 – 10 de Febrer
Escola Universitària Politècnica de Mataró