• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Framework Llibreries Lliures
 

Framework Llibreries Lliures

on

  • 1,614 views

Seminario Framework de desarrollo web a partir de librerias Libres: Smarty, PEAR::DataObject

Seminario Framework de desarrollo web a partir de librerias Libres: Smarty, PEAR::DataObject

Statistics

Views

Total Views
1,614
Views on SlideShare
1,577
Embed Views
37

Actions

Likes
1
Downloads
3
Comments
0

4 Embeds 37

http://dunlock.com 24
http://jordicata.com 9
http://www.linkedin.com 3
http://209.85.229.132 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Framework Llibreries Lliures Framework Llibreries Lliures Presentation Transcript

    • 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ó
    • 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
    • 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
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • Presentació/Vista: Smarty Petició VISTA CONTROLLER Resposta Smarty MODEL HTML Base dades Pear::DataObject ASSL Party, EUPMT'09, Framework Web: desenvolupat amb llibreries Lliures
    • 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,
    • 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,
    • 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,
    • 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,
    • Presentació/Vista: Smarty Configuració include 'Smarty.class.php'; define ('DIR_TEMPLATES' , ROOT_PATH .'templates/'); define ('DIR_TEMPLATES_C' , ROOT_PATH .'templates_c/'); define ('DIR_CONFIG' , ROOT_PATH .'config/'); class Smarty_template extends Smarty { function Smarty_template() { $this->Smarty(); $this->template_dir = DIR_TEMPLATES; $this->compile_dir = DIR_TEMPLATES_C; $this->config_dir = DIR_CONFIG; } } Sortida: HTML smarty.php.net ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures ASSL Party, EUPMT'09,
    • Presentació/Vista: Smarty Exemple 1 Projecte/exemple1.php <? include “Smarty_template.php”; $smarty = new Smarty_template; $smarty->assign (quot;TITTLEquot;, quot;Titol de provesquot;); $smarty->assign (quot;NOMquot;, quot;Pepe Floresquot;); $smarty->display('main.tpl'); -> mostrem la plantilla ?> Projecte/templates/main.tpl <html> <head><title>{$TITTLE|default:Intranet}</title></head> <body> Hola: {$NOM}<br> </body> </html> Sortida: HTML smarty.php.net ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures ASSL Party, EUPMT'09,
    • Presentació/Vista: Smarty Exemple 1 <html> plantilla.tpl <body> Nom: {$NOM}<br> Cognom: {$COGNOM} </body> </html> $smarty = new Smarty_template ; prova.php $smarty->assign (“NOM”, “Josep”); $smarty->assign (“COGNOM”, “Foix”); $smarty->display (“plantilla.tpl”); <html> <body> Nom: Josep<br> Sortida Cognom: Cognom </body> </html> ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures ASSL Party, EUPMT'09,
    • 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,
    • 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,
    • 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,
    • 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,
    • Presentació/Vista: Smarty, Section, exemple 3 {section name=line loop=$DADES} plantilla.tpl <br> {$DADES[line][0]}, {$DADES[line][1]} {/section} $smarty = new Smarty_template ; $smarty->assign (“USUARI_ADMIN”, true); $smarty->assign (“DADES”, array ( prova.php array(“Josep”, “Pepet”), array(“Jordi”, “Bosc”) ) ); $smarty->display (“plantilla.tpl”); <br> Sortida Josep, Pepet <br> Jordi, Bosc ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures ASSL Party, EUPMT'09,
    • 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,
    • Presentació/Vista: Smarty, constants, exemple 4 /projecte/config/catala.conf /projecte/config/castella.conf config NOM=”Nom” NOM”Nombre” TELEFON=”Telefon” TELEFON=”Telefono” plantilla.tpl {config_load file=”catala.conf”} {config_load file=”castella.conf”} <html> <html> <body> <body> {#NOM#}: {$NOM}<br> {#NOM#}: {$NOM}<br> {#TELEFON#}: {$TELEFON} {#TELEFON#}: {$TELEFON} </body> </body> </html> </html> <html> <html> <body> <body> Nom: Josep<br> Nombre: Josep<br> Sortida Telefon: Pepet Apellido: Pepet </body> </body> </html> </html> ASSL Party, EUPMT'09 ASSL Party, EUPMT'09, Framework Web: desenvolupat amb llibreries Lliures
    • 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,
    • Presentació/Vista: Smarty, includes, exemple 5 capcalera.tpl main5.tpl <title> {$TITTLE|default:quot;Intranetquot;} {include file=quot;capcalera.tplquot;} </title> {$TITTLE}, Idiomes<br> llibre.tpl {config_load file=quot;lan/catalan.confquot;} {#NOM#}: {$NOM} <br><b> Català</b> </br> {#TITOL#}: {$TITOL} {#ADRECA#}: {$ADRECA} {include file=quot;llibre.tplquot;} {include file=quot;peu.tplquot;} peu.tpl Peu de pàgina ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures ASSL Party, EUPMT'09,
    • 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,
    • 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
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • Física/Model: PEAR::DataObject: Generació Fitxer de configuració: /projecte/config/generate_do.ini [DB_DataObject] database = mysql://root:@localhost/test_db schema_location = classes/dbmapping class_location = classes/dbmapping require_prefix = DataObjects/ class_prefix = DataObjects_ extends_location = DataObject.php extends = DB_DataObject Executem el procés de generació php libs/DB/DataObject/createTables.php generate_do.ini ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures ASSL Party, EUPMT'09,
    • 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,
    • 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,
    • Física/Model: PEAR::DataObject Exemple 2: insert insert $usuari = DB_DataObject::factory(quot;tusuarisquot;) $usuari->NOM = “Pepet”; $usuari->COGNOM = “Boch”; $usuari->USUARI = “pboch”; $usuari->CLAU = “2323”; $usuari->insert (); ->INSERT INTO tusuaris (NOM,COGNOM,USUARI,CLAU) VALUES ('Pepet', 'Boch', 'pboch', '2323'); ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures ASSL Party, EUPMT'09,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • DMVC: estructura Estructura de Directoris: projecte/ classes/action/ -> Accions classes/view/ -> vistes classes/dbmapping/ -> classes de mapping BD “Models” classes/utils/ -> classes d'utilitats config/ -> fitxers de configuració libs/ -> llibreries PEAR, Smarty, etc templates/ -> templates d'smarty controller.php ASSL Party, EUPMT'09 Framework Web: desenvolupat amb llibreries Lliures ASSL Party, EUPMT'09,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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,
    • 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ó