SlideShare ist ein Scribd-Unternehmen logo
1 von 71
Downloaden Sie, um offline zu lesen
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ó

Weitere ähnliche Inhalte

Andere mochten auch

Het nieuwe investeren (event op 14/4)
Het nieuwe investeren (event op 14/4)Het nieuwe investeren (event op 14/4)
Het nieuwe investeren (event op 14/4)Participium
 
La Historia de PowerPoint de la paqueteria Office
La Historia de PowerPoint de la paqueteria OfficeLa Historia de PowerPoint de la paqueteria Office
La Historia de PowerPoint de la paqueteria OfficeRakkiRakki Martinez
 
Ensayo de herbicidas para el control de lolium
Ensayo de herbicidas para el control de loliumEnsayo de herbicidas para el control de lolium
Ensayo de herbicidas para el control de loliumCampo Global
 
Tabla comparativa de internet,intranet yextranet
Tabla comparativa de internet,intranet yextranetTabla comparativa de internet,intranet yextranet
Tabla comparativa de internet,intranet yextranetMonica Rmz M
 
SimpleCRM for Insurance Industry
SimpleCRM for Insurance IndustrySimpleCRM for Insurance Industry
SimpleCRM for Insurance Industrysimplecrm2016
 
Convenios Internacionales Universidad Nacional de Villarrica del Espíritu San...
Convenios Internacionales Universidad Nacional de Villarrica del Espíritu San...Convenios Internacionales Universidad Nacional de Villarrica del Espíritu San...
Convenios Internacionales Universidad Nacional de Villarrica del Espíritu San...Juan Carlos Rojas Chamorro
 
Saratoga CRM: Implementing Thin Client at Johnson Controls Inc.
Saratoga CRM: Implementing Thin Client at Johnson Controls Inc.Saratoga CRM: Implementing Thin Client at Johnson Controls Inc.
Saratoga CRM: Implementing Thin Client at Johnson Controls Inc.Aptean
 
Uso diferencia de la fuerza
Uso diferencia de la fuerzaUso diferencia de la fuerza
Uso diferencia de la fuerzajorgevenegas
 
Empathie wirkt lange nach
Empathie wirkt lange nachEmpathie wirkt lange nach
Empathie wirkt lange nachLifeconcept
 
Startup Korea Roundtable 2Q 2015 _Denmark
Startup Korea Roundtable 2Q 2015 _DenmarkStartup Korea Roundtable 2Q 2015 _Denmark
Startup Korea Roundtable 2Q 2015 _DenmarkD.CAMP
 
Retrospectivas
RetrospectivasRetrospectivas
RetrospectivasRosa Rivas
 
Presentacion Reciclaje Tecnonologico y Transporte Tecnologico
Presentacion Reciclaje Tecnonologico y Transporte TecnologicoPresentacion Reciclaje Tecnonologico y Transporte Tecnologico
Presentacion Reciclaje Tecnonologico y Transporte TecnologicoJose Ignacio Cantarero Castañeda
 
H323 Digital Failures
H323 Digital FailuresH323 Digital Failures
H323 Digital Failuresashiesh0007
 
Discapacidad motora hoyyyyyyy22222222
Discapacidad motora hoyyyyyyy22222222Discapacidad motora hoyyyyyyy22222222
Discapacidad motora hoyyyyyyy22222222rosa garcia auris
 
Analysis of levers of control in a slovenian company
Analysis of levers of control in a slovenian companyAnalysis of levers of control in a slovenian company
Analysis of levers of control in a slovenian companykesavneupane
 
Kertas penerangan 203
Kertas penerangan 203Kertas penerangan 203
Kertas penerangan 203SMTKK
 
Selling Responsive Webdesign - webtech Conference 2013
Selling Responsive Webdesign - webtech Conference 2013Selling Responsive Webdesign - webtech Conference 2013
Selling Responsive Webdesign - webtech Conference 2013die.agilen GmbH
 

Andere mochten auch (20)

Het nieuwe investeren (event op 14/4)
Het nieuwe investeren (event op 14/4)Het nieuwe investeren (event op 14/4)
Het nieuwe investeren (event op 14/4)
 
La Historia de PowerPoint de la paqueteria Office
La Historia de PowerPoint de la paqueteria OfficeLa Historia de PowerPoint de la paqueteria Office
La Historia de PowerPoint de la paqueteria Office
 
Ensayo de herbicidas para el control de lolium
Ensayo de herbicidas para el control de loliumEnsayo de herbicidas para el control de lolium
Ensayo de herbicidas para el control de lolium
 
Tabla comparativa de internet,intranet yextranet
Tabla comparativa de internet,intranet yextranetTabla comparativa de internet,intranet yextranet
Tabla comparativa de internet,intranet yextranet
 
Port Aventura
Port AventuraPort Aventura
Port Aventura
 
Presentación subestaciones
Presentación subestacionesPresentación subestaciones
Presentación subestaciones
 
SimpleCRM for Insurance Industry
SimpleCRM for Insurance IndustrySimpleCRM for Insurance Industry
SimpleCRM for Insurance Industry
 
Convenios Internacionales Universidad Nacional de Villarrica del Espíritu San...
Convenios Internacionales Universidad Nacional de Villarrica del Espíritu San...Convenios Internacionales Universidad Nacional de Villarrica del Espíritu San...
Convenios Internacionales Universidad Nacional de Villarrica del Espíritu San...
 
R32690
R32690R32690
R32690
 
Saratoga CRM: Implementing Thin Client at Johnson Controls Inc.
Saratoga CRM: Implementing Thin Client at Johnson Controls Inc.Saratoga CRM: Implementing Thin Client at Johnson Controls Inc.
Saratoga CRM: Implementing Thin Client at Johnson Controls Inc.
 
Uso diferencia de la fuerza
Uso diferencia de la fuerzaUso diferencia de la fuerza
Uso diferencia de la fuerza
 
Empathie wirkt lange nach
Empathie wirkt lange nachEmpathie wirkt lange nach
Empathie wirkt lange nach
 
Startup Korea Roundtable 2Q 2015 _Denmark
Startup Korea Roundtable 2Q 2015 _DenmarkStartup Korea Roundtable 2Q 2015 _Denmark
Startup Korea Roundtable 2Q 2015 _Denmark
 
Retrospectivas
RetrospectivasRetrospectivas
Retrospectivas
 
Presentacion Reciclaje Tecnonologico y Transporte Tecnologico
Presentacion Reciclaje Tecnonologico y Transporte TecnologicoPresentacion Reciclaje Tecnonologico y Transporte Tecnologico
Presentacion Reciclaje Tecnonologico y Transporte Tecnologico
 
H323 Digital Failures
H323 Digital FailuresH323 Digital Failures
H323 Digital Failures
 
Discapacidad motora hoyyyyyyy22222222
Discapacidad motora hoyyyyyyy22222222Discapacidad motora hoyyyyyyy22222222
Discapacidad motora hoyyyyyyy22222222
 
Analysis of levers of control in a slovenian company
Analysis of levers of control in a slovenian companyAnalysis of levers of control in a slovenian company
Analysis of levers of control in a slovenian company
 
Kertas penerangan 203
Kertas penerangan 203Kertas penerangan 203
Kertas penerangan 203
 
Selling Responsive Webdesign - webtech Conference 2013
Selling Responsive Webdesign - webtech Conference 2013Selling Responsive Webdesign - webtech Conference 2013
Selling Responsive Webdesign - webtech Conference 2013
 

Ähnlich wie Framework Llibreries Lliures

Presentacio Joomla Eupmt
Presentacio Joomla EupmtPresentacio Joomla Eupmt
Presentacio Joomla EupmtJordi Catà
 
Turbo Gears, Framework De Python Per Aplicacions Web
Turbo Gears, Framework De Python Per Aplicacions WebTurbo Gears, Framework De Python Per Aplicacions Web
Turbo Gears, Framework De Python Per Aplicacions WebTomàs Reverter
 
El framework Cakephp
El framework CakephpEl framework Cakephp
El framework Cakephpherotyc
 
ARSO-M6: Administracio del web - Guio
ARSO-M6: Administracio del web - GuioARSO-M6: Administracio del web - Guio
ARSO-M6: Administracio del web - GuioAurora Lara Marin
 
Llenguatges i Estàndards Web - PAC 1 correccció - Multimedia (UOC) - Paquita ...
Llenguatges i Estàndards Web - PAC 1 correccció - Multimedia (UOC) - Paquita ...Llenguatges i Estàndards Web - PAC 1 correccció - Multimedia (UOC) - Paquita ...
Llenguatges i Estàndards Web - PAC 1 correccció - Multimedia (UOC) - Paquita ...Paquita Ribas
 
OpenERP. L'ERP lliure
OpenERP. L'ERP lliureOpenERP. L'ERP lliure
OpenERP. L'ERP lliureraimonesteve
 
Dai 09-ruby on rails
Dai 09-ruby on railsDai 09-ruby on rails
Dai 09-ruby on railsCarles Mateu
 
Presentacio Django
Presentacio DjangoPresentacio Django
Presentacio DjangoAntoni Aloy
 
Itineraris IT Academy (2020)
Itineraris IT Academy (2020)Itineraris IT Academy (2020)
Itineraris IT Academy (2020)Barcelona Activa
 
M08 fulls d'estil
M08 fulls d'estilM08 fulls d'estil
M08 fulls d'estiljsanzvi
 
premiTIC_IAIG.odp
premiTIC_IAIG.odppremiTIC_IAIG.odp
premiTIC_IAIG.odpPremi TIC
 
Arquitectura de la Información - Pràctica - Lidia Bria
Arquitectura de la Información - Pràctica -  Lidia BriaArquitectura de la Información - Pràctica -  Lidia Bria
Arquitectura de la Información - Pràctica - Lidia BriaLidia Bria
 
Blue2Boss PXC E1
Blue2Boss PXC E1Blue2Boss PXC E1
Blue2Boss PXC E1elr1c
 
SIGT09 Introducció Joomla
SIGT09 Introducció JoomlaSIGT09 Introducció Joomla
SIGT09 Introducció JoomlaAlex Araujo
 
Introducció a Drupal Commerce
Introducció a Drupal CommerceIntroducció a Drupal Commerce
Introducció a Drupal Commercetalkomraja
 
Arquitectura de la Información - Pac03 - Lidia Bria
Arquitectura de la Información - Pac03 -  Lidia BriaArquitectura de la Información - Pac03 -  Lidia Bria
Arquitectura de la Información - Pac03 - Lidia BriaLidia Bria
 
Àgora: el tercer nivell
Àgora: el tercer nivellÀgora: el tercer nivell
Àgora: el tercer nivellIThinkUPC
 

Ähnlich wie Framework Llibreries Lliures (20)

Presentacio Joomla Eupmt
Presentacio Joomla EupmtPresentacio Joomla Eupmt
Presentacio Joomla Eupmt
 
Turbo Gears, Framework De Python Per Aplicacions Web
Turbo Gears, Framework De Python Per Aplicacions WebTurbo Gears, Framework De Python Per Aplicacions Web
Turbo Gears, Framework De Python Per Aplicacions Web
 
El framework Cakephp
El framework CakephpEl framework Cakephp
El framework Cakephp
 
ARSO-M6: Administracio del web - Guio
ARSO-M6: Administracio del web - GuioARSO-M6: Administracio del web - Guio
ARSO-M6: Administracio del web - Guio
 
Llenguatges i Estàndards Web - PAC 1 correccció - Multimedia (UOC) - Paquita ...
Llenguatges i Estàndards Web - PAC 1 correccció - Multimedia (UOC) - Paquita ...Llenguatges i Estàndards Web - PAC 1 correccció - Multimedia (UOC) - Paquita ...
Llenguatges i Estàndards Web - PAC 1 correccció - Multimedia (UOC) - Paquita ...
 
OpenERP. L'ERP lliure
OpenERP. L'ERP lliureOpenERP. L'ERP lliure
OpenERP. L'ERP lliure
 
Dai 09-ruby on rails
Dai 09-ruby on railsDai 09-ruby on rails
Dai 09-ruby on rails
 
Presentacio Django
Presentacio DjangoPresentacio Django
Presentacio Django
 
Itineraris IT Academy (2020)
Itineraris IT Academy (2020)Itineraris IT Academy (2020)
Itineraris IT Academy (2020)
 
M08 fulls d'estil
M08 fulls d'estilM08 fulls d'estil
M08 fulls d'estil
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
 
premiTIC_IAIG.odp
premiTIC_IAIG.odppremiTIC_IAIG.odp
premiTIC_IAIG.odp
 
Arquitectura de la Información - Pràctica - Lidia Bria
Arquitectura de la Información - Pràctica -  Lidia BriaArquitectura de la Información - Pràctica -  Lidia Bria
Arquitectura de la Información - Pràctica - Lidia Bria
 
Blue2Boss PXC E1
Blue2Boss PXC E1Blue2Boss PXC E1
Blue2Boss PXC E1
 
SIGT09 Introducció Joomla
SIGT09 Introducció JoomlaSIGT09 Introducció Joomla
SIGT09 Introducció Joomla
 
Introducció a Drupal Commerce
Introducció a Drupal CommerceIntroducció a Drupal Commerce
Introducció a Drupal Commerce
 
Arquitectura de la Información - Pac03 - Lidia Bria
Arquitectura de la Información - Pac03 -  Lidia BriaArquitectura de la Información - Pac03 -  Lidia Bria
Arquitectura de la Información - Pac03 - Lidia Bria
 
Html, Xtml & Php
Html, Xtml & PhpHtml, Xtml & Php
Html, Xtml & Php
 
Àgora: el tercer nivell
Àgora: el tercer nivellÀgora: el tercer nivell
Àgora: el tercer nivell
 
Asix act3v4
Asix act3v4Asix act3v4
Asix act3v4
 

Mehr von Jordi Catà

Introducción a la Financiación alternativa
Introducción a la Financiación alternativaIntroducción a la Financiación alternativa
Introducción a la Financiación alternativaJordi Catà
 
Finançament alternatiu per a empreses, Introducció
Finançament alternatiu per a empreses, IntroduccióFinançament alternatiu per a empreses, Introducció
Finançament alternatiu per a empreses, IntroduccióJordi Catà
 
Estrategias/consejos para mejorar tu eCommerce y hacerlo más rendible
Estrategias/consejos para mejorar tu eCommerce y hacerlo más rendibleEstrategias/consejos para mejorar tu eCommerce y hacerlo más rendible
Estrategias/consejos para mejorar tu eCommerce y hacerlo más rendibleJordi Catà
 
Mobile Commerce Business Networking Event JCI Girona 2013
Mobile Commerce Business Networking Event JCI Girona 2013Mobile Commerce Business Networking Event JCI Girona 2013
Mobile Commerce Business Networking Event JCI Girona 2013Jordi Catà
 
Jove Cambra Internacional de Girona Resum president 2009
Jove Cambra Internacional de Girona Resum president 2009 Jove Cambra Internacional de Girona Resum president 2009
Jove Cambra Internacional de Girona Resum president 2009 Jordi Catà
 
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundra
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundraJoomla!day2013 Albacete Spain, Responsive, Adaptive y la tundra
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundraJordi Catà
 
Models de negoci amb Programari Lliure : Joomla
Models de negoci amb Programari Lliure : JoomlaModels de negoci amb Programari Lliure : Joomla
Models de negoci amb Programari Lliure : JoomlaJordi Catà
 
Eshow2012 Madrid, Joomla y Ecommerce
Eshow2012 Madrid, Joomla y EcommerceEshow2012 Madrid, Joomla y Ecommerce
Eshow2012 Madrid, Joomla y EcommerceJordi Catà
 
Joomla!day2012 Merida
Joomla!day2012 MeridaJoomla!day2012 Merida
Joomla!day2012 MeridaJordi Catà
 
Introducció a Scrum
Introducció a ScrumIntroducció a Scrum
Introducció a ScrumJordi Catà
 
Conferencia Joomla y Comercio Electrónico: Ecommretail 2011
Conferencia Joomla y Comercio Electrónico: Ecommretail 2011Conferencia Joomla y Comercio Electrónico: Ecommretail 2011
Conferencia Joomla y Comercio Electrónico: Ecommretail 2011Jordi Catà
 
Presentación joomla-day-2010 Jordi Vila
Presentación joomla-day-2010 Jordi VilaPresentación joomla-day-2010 Jordi Vila
Presentación joomla-day-2010 Jordi VilaJordi Catà
 
Joomla!day2010 Valencia - Joomla! casos de exito
Joomla!day2010 Valencia - Joomla! casos de exitoJoomla!day2010 Valencia - Joomla! casos de exito
Joomla!day2010 Valencia - Joomla! casos de exitoJordi Catà
 
Presentación Joomla y comerció electrónico, casos de èxito
Presentación Joomla y comerció electrónico, casos de èxitoPresentación Joomla y comerció electrónico, casos de èxito
Presentación Joomla y comerció electrónico, casos de èxitoJordi Catà
 
Joomla!Day Spain Barcelona, Joomla! para todo tipo de proyectos
Joomla!Day Spain Barcelona, Joomla! para todo tipo de proyectosJoomla!Day Spain Barcelona, Joomla! para todo tipo de proyectos
Joomla!Day Spain Barcelona, Joomla! para todo tipo de proyectosJordi Catà
 
Presentacion Joomla Phpconference Barcelona 2009
Presentacion Joomla Phpconference Barcelona 2009Presentacion Joomla Phpconference Barcelona 2009
Presentacion Joomla Phpconference Barcelona 2009Jordi Catà
 
Presentacio Joomla Ecommerce Volcanica2009
Presentacio Joomla Ecommerce Volcanica2009Presentacio Joomla Ecommerce Volcanica2009
Presentacio Joomla Ecommerce Volcanica2009Jordi Catà
 
Flyer Netcoffee Imatge
Flyer Netcoffee ImatgeFlyer Netcoffee Imatge
Flyer Netcoffee ImatgeJordi Catà
 
Presentacio Productivitat Tic
Presentacio Productivitat TicPresentacio Productivitat Tic
Presentacio Productivitat TicJordi Catà
 

Mehr von Jordi Catà (20)

Introducción a la Financiación alternativa
Introducción a la Financiación alternativaIntroducción a la Financiación alternativa
Introducción a la Financiación alternativa
 
Finançament alternatiu per a empreses, Introducció
Finançament alternatiu per a empreses, IntroduccióFinançament alternatiu per a empreses, Introducció
Finançament alternatiu per a empreses, Introducció
 
Estrategias/consejos para mejorar tu eCommerce y hacerlo más rendible
Estrategias/consejos para mejorar tu eCommerce y hacerlo más rendibleEstrategias/consejos para mejorar tu eCommerce y hacerlo más rendible
Estrategias/consejos para mejorar tu eCommerce y hacerlo más rendible
 
Mobile Commerce Business Networking Event JCI Girona 2013
Mobile Commerce Business Networking Event JCI Girona 2013Mobile Commerce Business Networking Event JCI Girona 2013
Mobile Commerce Business Networking Event JCI Girona 2013
 
Jove Cambra Internacional de Girona Resum president 2009
Jove Cambra Internacional de Girona Resum president 2009 Jove Cambra Internacional de Girona Resum president 2009
Jove Cambra Internacional de Girona Resum president 2009
 
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundra
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundraJoomla!day2013 Albacete Spain, Responsive, Adaptive y la tundra
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundra
 
Models de negoci amb Programari Lliure : Joomla
Models de negoci amb Programari Lliure : JoomlaModels de negoci amb Programari Lliure : Joomla
Models de negoci amb Programari Lliure : Joomla
 
Eshow2012 Madrid, Joomla y Ecommerce
Eshow2012 Madrid, Joomla y EcommerceEshow2012 Madrid, Joomla y Ecommerce
Eshow2012 Madrid, Joomla y Ecommerce
 
Joomla!day2012 Merida
Joomla!day2012 MeridaJoomla!day2012 Merida
Joomla!day2012 Merida
 
Introducció a Scrum
Introducció a ScrumIntroducció a Scrum
Introducció a Scrum
 
Conferencia Joomla y Comercio Electrónico: Ecommretail 2011
Conferencia Joomla y Comercio Electrónico: Ecommretail 2011Conferencia Joomla y Comercio Electrónico: Ecommretail 2011
Conferencia Joomla y Comercio Electrónico: Ecommretail 2011
 
Presentación joomla-day-2010 Jordi Vila
Presentación joomla-day-2010 Jordi VilaPresentación joomla-day-2010 Jordi Vila
Presentación joomla-day-2010 Jordi Vila
 
Joomla!day2010 Valencia - Joomla! casos de exito
Joomla!day2010 Valencia - Joomla! casos de exitoJoomla!day2010 Valencia - Joomla! casos de exito
Joomla!day2010 Valencia - Joomla! casos de exito
 
Presentación Joomla y comerció electrónico, casos de èxito
Presentación Joomla y comerció electrónico, casos de èxitoPresentación Joomla y comerció electrónico, casos de èxito
Presentación Joomla y comerció electrónico, casos de èxito
 
Joomla!Day Spain Barcelona, Joomla! para todo tipo de proyectos
Joomla!Day Spain Barcelona, Joomla! para todo tipo de proyectosJoomla!Day Spain Barcelona, Joomla! para todo tipo de proyectos
Joomla!Day Spain Barcelona, Joomla! para todo tipo de proyectos
 
Presentacion Joomla Phpconference Barcelona 2009
Presentacion Joomla Phpconference Barcelona 2009Presentacion Joomla Phpconference Barcelona 2009
Presentacion Joomla Phpconference Barcelona 2009
 
Presentacio Joomla Ecommerce Volcanica2009
Presentacio Joomla Ecommerce Volcanica2009Presentacio Joomla Ecommerce Volcanica2009
Presentacio Joomla Ecommerce Volcanica2009
 
Volcanica2007
Volcanica2007Volcanica2007
Volcanica2007
 
Flyer Netcoffee Imatge
Flyer Netcoffee ImatgeFlyer Netcoffee Imatge
Flyer Netcoffee Imatge
 
Presentacio Productivitat Tic
Presentacio Productivitat TicPresentacio Productivitat Tic
Presentacio Productivitat Tic
 

Framework Llibreries Lliures

  • 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,
  • 18. 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,
  • 19. 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,
  • 20. 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,
  • 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,
  • 25. 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,
  • 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,
  • 27. 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
  • 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,
  • 29. 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,
  • 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,
  • 37. 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,
  • 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,
  • 40. 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,
  • 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,
  • 53. 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,
  • 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ó