SlideShare a Scribd company logo
1 of 37
Download to read offline
Programació en PHP
     Jordi Catà



  Programació Avançada en PHP
 Jordi Catà Castillo - jordi.cata@dunlock.com
      Dunlock – Enginyeria Informàtica
               Volcànica 2007
Objectius de la Xerrada

Veure  algunes  llibreries  estandars  que  ens  permeten  organitzar  el  codi  de  maneres 
més “interessants”.


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.
Introducció

Que és/pot ser desenvolupar en PHP ?

    ­ Programació sense ordre, sense cap tipus de disseny.
    ­ 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.
Disseny 3 capes



    Físic




   Negoci




                  HTML + Smarty Tags
 Presentació
                   HTML + JavaScript
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.
Capa presentació: 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
Smarty, exemple
plantilla.tpl

       Nom Usuari: {$NOM},{$COGNOM}

       <br>
       Contactes
       {section name=line loop=$DADES}
       <br>
       {$DADES[line].nom}, {$DADES[line].cognom}
       {/section}



Sortida navegador

       Nom Usuari: Josep<br>
       Cognom Usuari: Foix

       <br>
       Contactes
       <br>Jordi, Mata
       <br>David, Folch
       <br>
Smarty, configuració

Smarty requereix 4 directoris per poder treballar:


-TEMPLATE_DIR: directori on tenim els fitxers de “plantilles”.

-COMPILE_DIR: directori on es “compila” les plantilles per poder-se
“executar” de forma ràpida

-CONFIG_DIR: directori on troba fitxers de configuració (constants smarty)

-CACHE_DIR: directori de cache per les plantilles compilades


Es important tenir permisos 777 ( a+wrx) en CACHE_DIR, COMPILE_DIR
Smarty, configuració

COMPILE_DIR             CACHE_DIR
/projecte/templates_c   /projecte/cache



 TEMPLATE_DIR
                        CONFIG_DIR
 /projecte/templates
                        /projecte/config
 ->plantilla.tpl




  /projecte/
  ->prova.php
Smarty, configuració

include 'Smarty.class.php';

define ('DIR_TEMPLATES'       ,   ROOT_PATH .'templates/');
define ('DIR_CACHE'           ,   ROOT_PATH .'cache/');
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;
        $this->cache_dir = DIR_CACHE;
        $this->caching    = false;
    }
}
Smarty, Utilització, Variables

prova.php

include “Smarty_template.php”;

$smarty = new Smarty_template;
$smarty->assign('NOM','Josep');
$smarty->assign('COGNOM','Pepet');

$smarty->display('plantilla.tpl'); -> mostrem la plantilla



plantilla.tpl

<html>
<body>
   Nom: {$NOM}<br>
   Cognom: {$COGNOM}
</body>
</html>
Smarty, Utilització, Exemple

                <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>
 Sortida           Nom: Josep<br>
                   Cognom: Cognom
                </body>
                </html>
Smarty, Utilització, 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
Smarty, Utilització, 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>
 Sortida        Ets un admin
                    Nom: Josep<br>
                    Cognom: Cognom
                </body>
                </html>
Smarty, Utilització, 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}
Smarty, Utilització, Section

                   {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
Smarty, Utilització, fitxers de configuració

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}
Smarty, Utilització, fitxers de configuració

                /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>
Smarty, Utilització, 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

<body>
Nom {$NOM}, Cognom: {$COGNOM}

{include file=”peu_pagina.tpl”}
</body>

peu_pagina.tpl

<div align=”center”> Peu de pàgina </div>
Smarty, Utilització, includes

                   <body>
plantilla.tpl      Nom {$NOM}, Cognom: {$COGNOM}

                   {include file=”peu_pagina.tpl”}
                   </body>



                $smarty = new Smarty_template ;
                $smarty->display (“plantilla.tpl”);
prova.php

                <body>
                Nom Pepet, Cognom: Pepe
Sortida
                <div align=”center”> Peu de pàgina </div>
                </body>
Capa física: PEAR

   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
Capa física: PEAR, DataObject
Exemple de codi sense utilitzar Pear

    $query = 'SELECT * FROM  my_table';

    $link = mysql_connect('my_host', 'my_user', 'my_password');
                    mysql_select_db('my_database');
    $result = mysql_query($query);
    $line = mysql_fetch_array($result)



   $link = pg_pconnect('host=host port=5432 dbname=database 
                    user=user password=pwd');
   $result = pg_query($link, $query);
    $line = pg_fetch_result($result)



   $link = Ora_Logon("my_user", "my_password");
   $result = ora_do( $ora_conn, $query);
   ora_fetch_into( $result, $line);
PEAR, Dataobject
Exemple de codi utilitzant Pear:

$dbh = DB::connect('mysql://my_user:my_pass@my_host/my_database);




$dbh = DB::connect('pgsql://my_user:my_pass@my_host/my_database);




$dbh = DB::connect
('oracle://my_user:my_pass@my_host/my_database);




$result = $dbh­>Query ( 'SELECT * FROM * my_table');
$line = $result­>fetchRow();
PEAR, Dataobject, generació


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.
PEAR, Dataobject, generació

Fitxer de configuració:

/projecte/generate_do.ini

[DB_DataObject]

database = mysql://root:@localhost/basededades
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
PEAR, Dataobject, generació

El codi que ens genera el procés es com el següent:

class DataObjects_Tusuaris extends DB_DataObject
{
   ###START_AUTOCODE
   /* the code below is auto generated do not remove the above tag */

    public   $__table = 'tusuaris';                  // table name
    public   $CODI_USUARI;                  // int(10) not_null primary_key
    public   $NOM;                    // string(50)
    public   $COGNOM;                     // string(50)
    public   $USUARI;                  // string(50)
    public   $CLAU;                   // string(50)
    public   $PERMISOS;                  // string(50)

    /* Static get */
    function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('DataObjec

    /* the code above is auto generated do not remove the tag below */
    ###END_AUTOCODE
}
PEAR, Dataobject, utilització


<?php

$opts = &PEAR::getStaticProperty('DB_DataObject','options');

$opts = array(

       'class_location' => '/var/www/html/projects/classes/dbmapping',

       'class_prefix'   => 'DataObjects_',

       'database'       => 'mysql://usuari:password@localhost/basededades'

);

$usuari = DB_DataObject::factory('tusuaris');

if ($usuari->get(12))

{

       echo "<br> usuari trobat";

}

else

{

       echo "No s'ha trobat el registre d'usuari amb id 12";

}
PEAR, Dataobject, utilització

$usuari = DB_DataObject::factory("tusuaris")
$usuari->find();

->executa "SELECT * FROM tusuaris";


$usuari = DB_DataObject::factory("tusuaris")
$usuari->USUARI = "nom_usuari";
$usuari->CLAU = "contrasenya";
$usuari->find();

->executa "SELECT * FROM tusuaris where
        USUARI = "nom_usuari" AND CLAU = "contrasenya";


$usuari = DB_DataObject::factory("tusuaris")
$usuari->find();
while ($usuari->fetch ())
{
    echo "<br> nom usuari: " .$usuari->NOM_USUARI;
}
PEAR, Dataobject, utilització
insert

$usuari = DB_DataObject::factory("tusuaris")
$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');



update

$usuari = DB_DataObject::factory("tusuaris")
$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';
PEAR, Dataobject, utilització
delete

$usuari = DB_DataObject::factory("tusuaris")
$usuari->USUARI = “pboch”;
$usuari->delete ();

->DELETE FROM tusuaris WHERE USUARI = 'pboch';


orderBy

$usuari = DB_DataObject::factory("tusuaris")
$usuari->orderBy (“NOM, COGNOM”);
$usuari->find ();

->SELECT * FROM tusuaris order by NOM, COGNOM
PEAR, Dataobject, utilització
setFrom

assigna de forma automàtica valors del REQUEST a camps de l'objecte Dataobject


if ($_REQUEST[“submit”] == “”)
{
      ?>
      NOM USUARI: <input type=”text” name=”NOM”>
      COGNOM USUARI: <input type=”text” name=”COGNOM”>
      <?
}
else
{

    $usuari = DB_DataObject::factory("tusuaris")
    $usuari->setFrom ($_REQUEST);

    $usuari->insert ();

    --> INSERT INTO tusuaris (NOM, COGNOM)
            VALUES (NOM_INTRODUIT, COGNOM_INTRODUIT)
}
PEAR, Dataobject, utilització
getLink

retorna el registre relacionat d'una altra taula, per exemple

USUARI --> COTXE

USUARI                             COTXE
ID CODI_USUARI      nom            ID CODI_USUARI_FK            MARCA
1    2              pepet          1  2                         RENAULT


Un usuari té associat 1 cotxes

$usuari->get (1);

     -> SELECT * FROM USUARIS WHERE ID = 1;
     -> retorna el registre del usuari


$cotxe = $usuari->getLink (“CODI_USUARI”, “COTXE”, “CODI_USUARI_FK”);

     -> SELECT * FROM COTXE WHERE CODI_USUARI_FK = 2;
PEAR, Dataobject, utilització
getLinks

retorna els registres relacionats d'una forma automàtica a partir del fitxer

databasename.links.ini

[COTXE]
CODI_USUARI_FK = USUARI:CODI_USUARI



USUARI --> COTXE

USUARI                             COTXE
ID CODI_USUARI      NOM            ID CODI_USUARI_FK         MARCA
1    2              pepet          1  2                      RENAULT


$cotxe = DB_DataObject::factory("COTXE")
$cotxe->get (1); -> SELECT * FROM COTXE WHERE ID = 1;

$cotxe->getLinks ();

echo $cotxe->_USUARI->_NOM; -> Mostra el nom del usuari Associat al
registre cotxe
PEAR, Dataobject, utilització

whereAdd, Count



$person->name = "test";

$person->whereAdd("name like '%test%");

$total = $person->count(DB_DATAOBJECT_WHEREADD_ONLY);

echo "There are {$total} names in the database";




SELECT count(person.id) AS DATAOBJECT_NUM

       FROM person

       WHERE name like '%test%';
PEAR, Dataobject, utilització
Altres métodes

Limit

GroupBy

escape


selectASs

joinAdd

toArray

validate

DB_DataObject::debugLevel(5); -> IMPORTANTISIM Per Debugar Dataobject !!!
PEAR, altres
HTML_QuickForm -> Sistema per generar formularis HTML via PHP



DataObject_FormBuilder -> sistema per generar formularis a partir d'objectes
Dataobject, es genera automaticament Altes/Baixes/Modificacions de registres...
Programació en PHP
     Jordi Catà



 Gracies per la vostra atenció


  Programació Avançada en PHP
 Jordi Catà Castillo - jordi.cata@dunlock.com
      Dunlock – Enginyeria Informàtica
               Volcànica 2007

More Related Content

Viewers also liked

ORDENANZA PARA CONTROL Y MANEJO DE LA FAUNA URBANA Y LA PROTECCIÓN DE ANIMALE...
ORDENANZA PARA CONTROL Y MANEJO DE LA FAUNA URBANA Y LA PROTECCIÓN DE ANIMALE...ORDENANZA PARA CONTROL Y MANEJO DE LA FAUNA URBANA Y LA PROTECCIÓN DE ANIMALE...
ORDENANZA PARA CONTROL Y MANEJO DE LA FAUNA URBANA Y LA PROTECCIÓN DE ANIMALE...Brian Mora
 
Cómo trabajan los Googlers
Cómo trabajan los GooglersCómo trabajan los Googlers
Cómo trabajan los GooglersDavid Chandler
 
Holy wind 2 español
Holy wind 2 españolHoly wind 2 español
Holy wind 2 españolcfromjah
 
Interactive Intelligence | Los Indicadores de los Contact Centers que sí impo...
Interactive Intelligence | Los Indicadores de los Contact Centers que sí impo...Interactive Intelligence | Los Indicadores de los Contact Centers que sí impo...
Interactive Intelligence | Los Indicadores de los Contact Centers que sí impo...elcontact.com
 
Q4 2011 Press Release MOOG
Q4 2011 Press Release MOOGQ4 2011 Press Release MOOG
Q4 2011 Press Release MOOGxutao80125
 
Skvělé služby v Ekonomu
Skvělé služby v EkonomuSkvělé služby v Ekonomu
Skvělé služby v EkonomuAdamHazdra
 
Multitud n°2 aporte del pensamiento marxista al anticapitalismo hoy
Multitud n°2   aporte del pensamiento marxista al anticapitalismo hoyMultitud n°2   aporte del pensamiento marxista al anticapitalismo hoy
Multitud n°2 aporte del pensamiento marxista al anticapitalismo hoyrevistamultitud
 
Redes como plataforma e intercambio de experiencias
Redes como plataforma e intercambio de experienciasRedes como plataforma e intercambio de experiencias
Redes como plataforma e intercambio de experienciasJosé Luis Cabello Espolio
 
XII Encuentro de Líderes 2012 Obra Kolping Bolivia
XII Encuentro de Líderes 2012 Obra Kolping BoliviaXII Encuentro de Líderes 2012 Obra Kolping Bolivia
XII Encuentro de Líderes 2012 Obra Kolping BoliviaKolping Bolivia
 
Google Analytics y la alta dirección
Google Analytics y la alta direcciónGoogle Analytics y la alta dirección
Google Analytics y la alta direcciónSonia Contero
 
D link-dir-615-manual
D link-dir-615-manualD link-dir-615-manual
D link-dir-615-manual40044
 
Full sol·licitud serveis menjador
Full sol·licitud serveis menjadorFull sol·licitud serveis menjador
Full sol·licitud serveis menjadorteresianestarragona
 

Viewers also liked (15)

ORDENANZA PARA CONTROL Y MANEJO DE LA FAUNA URBANA Y LA PROTECCIÓN DE ANIMALE...
ORDENANZA PARA CONTROL Y MANEJO DE LA FAUNA URBANA Y LA PROTECCIÓN DE ANIMALE...ORDENANZA PARA CONTROL Y MANEJO DE LA FAUNA URBANA Y LA PROTECCIÓN DE ANIMALE...
ORDENANZA PARA CONTROL Y MANEJO DE LA FAUNA URBANA Y LA PROTECCIÓN DE ANIMALE...
 
Cómo trabajan los Googlers
Cómo trabajan los GooglersCómo trabajan los Googlers
Cómo trabajan los Googlers
 
Holy wind 2 español
Holy wind 2 españolHoly wind 2 español
Holy wind 2 español
 
Interactive Intelligence | Los Indicadores de los Contact Centers que sí impo...
Interactive Intelligence | Los Indicadores de los Contact Centers que sí impo...Interactive Intelligence | Los Indicadores de los Contact Centers que sí impo...
Interactive Intelligence | Los Indicadores de los Contact Centers que sí impo...
 
Q4 2011 Press Release MOOG
Q4 2011 Press Release MOOGQ4 2011 Press Release MOOG
Q4 2011 Press Release MOOG
 
Skvělé služby v Ekonomu
Skvělé služby v EkonomuSkvělé služby v Ekonomu
Skvělé služby v Ekonomu
 
Multitud n°2 aporte del pensamiento marxista al anticapitalismo hoy
Multitud n°2   aporte del pensamiento marxista al anticapitalismo hoyMultitud n°2   aporte del pensamiento marxista al anticapitalismo hoy
Multitud n°2 aporte del pensamiento marxista al anticapitalismo hoy
 
Redes como plataforma e intercambio de experiencias
Redes como plataforma e intercambio de experienciasRedes como plataforma e intercambio de experiencias
Redes como plataforma e intercambio de experiencias
 
XII Encuentro de Líderes 2012 Obra Kolping Bolivia
XII Encuentro de Líderes 2012 Obra Kolping BoliviaXII Encuentro de Líderes 2012 Obra Kolping Bolivia
XII Encuentro de Líderes 2012 Obra Kolping Bolivia
 
Google Analytics y la alta dirección
Google Analytics y la alta direcciónGoogle Analytics y la alta dirección
Google Analytics y la alta dirección
 
D link-dir-615-manual
D link-dir-615-manualD link-dir-615-manual
D link-dir-615-manual
 
Liahona 2011 01
Liahona 2011 01Liahona 2011 01
Liahona 2011 01
 
Mtg m4 u1_proyecto final
Mtg m4 u1_proyecto finalMtg m4 u1_proyecto final
Mtg m4 u1_proyecto final
 
Full sol·licitud serveis menjador
Full sol·licitud serveis menjadorFull sol·licitud serveis menjador
Full sol·licitud serveis menjador
 
Presentacion de autos
Presentacion de autosPresentacion de autos
Presentacion de autos
 

Similar to Volcanica2007

Cas d’us de Framework web desenvolupat amb llibreries Lliures
Cas d’us de Framework web desenvolupat amb llibreries LliuresCas d’us de Framework web desenvolupat amb llibreries Lliures
Cas d’us de Framework web desenvolupat amb llibreries LliuresJordi Catà
 
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
 
Introduccio a Drupal, guifi.net al citilab.
Introduccio a Drupal, guifi.net al citilab.Introduccio a Drupal, guifi.net al citilab.
Introduccio a Drupal, guifi.net al citilab.Marc Navarro
 
Etiquetes HTML bàsiques - Resum - Multimedia (UOC) - Paquita Ribas
Etiquetes HTML bàsiques - Resum - Multimedia (UOC) - Paquita RibasEtiquetes HTML bàsiques - Resum - Multimedia (UOC) - Paquita Ribas
Etiquetes HTML bàsiques - Resum - Multimedia (UOC) - Paquita RibasPaquita Ribas
 
Presentacio alfresco
Presentacio alfrescoPresentacio alfresco
Presentacio alfrescomiquel011
 
Framework Llibreries Lliures
Framework Llibreries LliuresFramework Llibreries Lliures
Framework Llibreries LliuresJordi Catà
 
Seo Drupal
Seo DrupalSeo Drupal
Seo Drupaldrauta
 
Guia visual Moodle: instal·lacio de Moodle al servidor phobos.xtec.cat o hipo...
Guia visual Moodle: instal·lacio de Moodle al servidor phobos.xtec.cat o hipo...Guia visual Moodle: instal·lacio de Moodle al servidor phobos.xtec.cat o hipo...
Guia visual Moodle: instal·lacio de Moodle al servidor phobos.xtec.cat o hipo...Jordi Fontich
 
10.Personalitzar Plantilla
10.Personalitzar Plantilla10.Personalitzar Plantilla
10.Personalitzar Plantillamnicolau
 
Llenguatges i Estàndards Web - PAC 1 - Multimedia (UOC) - Paquita Ribas
Llenguatges i Estàndards Web - PAC 1 - Multimedia (UOC) - Paquita RibasLlenguatges i Estàndards Web - PAC 1 - Multimedia (UOC) - Paquita Ribas
Llenguatges i Estàndards Web - PAC 1 - Multimedia (UOC) - Paquita RibasPaquita Ribas
 
Curs Linux: Sessió 2 Conceptes Bàsics d'Administració
Curs Linux: Sessió 2 Conceptes Bàsics d'AdministracióCurs Linux: Sessió 2 Conceptes Bàsics d'Administració
Curs Linux: Sessió 2 Conceptes Bàsics d'AdministracióESMagdalenes
 
Linux Administracio 2
Linux Administracio 2Linux Administracio 2
Linux Administracio 2Núria Alonso
 
Programació Web - PAC 4 - Multimèdia (UOC) - Paquita Ribas
Programació  Web - PAC 4 - Multimèdia (UOC) - Paquita RibasProgramació  Web - PAC 4 - Multimèdia (UOC) - Paquita Ribas
Programació Web - PAC 4 - Multimèdia (UOC) - Paquita RibasPaquita Ribas
 
Wellcome to the wonderful world of unit testing
Wellcome to the wonderful world of unit testingWellcome to the wonderful world of unit testing
Wellcome to the wonderful world of unit testingMarçal Berga
 

Similar to Volcanica2007 (15)

Cas d’us de Framework web desenvolupat amb llibreries Lliures
Cas d’us de Framework web desenvolupat amb llibreries LliuresCas d’us de Framework web desenvolupat amb llibreries Lliures
Cas d’us de Framework web desenvolupat amb llibreries Lliures
 
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 ...
 
Introduccio a Drupal, guifi.net al citilab.
Introduccio a Drupal, guifi.net al citilab.Introduccio a Drupal, guifi.net al citilab.
Introduccio a Drupal, guifi.net al citilab.
 
Etiquetes HTML bàsiques - Resum - Multimedia (UOC) - Paquita Ribas
Etiquetes HTML bàsiques - Resum - Multimedia (UOC) - Paquita RibasEtiquetes HTML bàsiques - Resum - Multimedia (UOC) - Paquita Ribas
Etiquetes HTML bàsiques - Resum - Multimedia (UOC) - Paquita Ribas
 
Prog_pac3
Prog_pac3Prog_pac3
Prog_pac3
 
Presentacio alfresco
Presentacio alfrescoPresentacio alfresco
Presentacio alfresco
 
Framework Llibreries Lliures
Framework Llibreries LliuresFramework Llibreries Lliures
Framework Llibreries Lliures
 
Seo Drupal
Seo DrupalSeo Drupal
Seo Drupal
 
Guia visual Moodle: instal·lacio de Moodle al servidor phobos.xtec.cat o hipo...
Guia visual Moodle: instal·lacio de Moodle al servidor phobos.xtec.cat o hipo...Guia visual Moodle: instal·lacio de Moodle al servidor phobos.xtec.cat o hipo...
Guia visual Moodle: instal·lacio de Moodle al servidor phobos.xtec.cat o hipo...
 
10.Personalitzar Plantilla
10.Personalitzar Plantilla10.Personalitzar Plantilla
10.Personalitzar Plantilla
 
Llenguatges i Estàndards Web - PAC 1 - Multimedia (UOC) - Paquita Ribas
Llenguatges i Estàndards Web - PAC 1 - Multimedia (UOC) - Paquita RibasLlenguatges i Estàndards Web - PAC 1 - Multimedia (UOC) - Paquita Ribas
Llenguatges i Estàndards Web - PAC 1 - Multimedia (UOC) - Paquita Ribas
 
Curs Linux: Sessió 2 Conceptes Bàsics d'Administració
Curs Linux: Sessió 2 Conceptes Bàsics d'AdministracióCurs Linux: Sessió 2 Conceptes Bàsics d'Administració
Curs Linux: Sessió 2 Conceptes Bàsics d'Administració
 
Linux Administracio 2
Linux Administracio 2Linux Administracio 2
Linux Administracio 2
 
Programació Web - PAC 4 - Multimèdia (UOC) - Paquita Ribas
Programació  Web - PAC 4 - Multimèdia (UOC) - Paquita RibasProgramació  Web - PAC 4 - Multimèdia (UOC) - Paquita Ribas
Programació Web - PAC 4 - Multimèdia (UOC) - Paquita Ribas
 
Wellcome to the wonderful world of unit testing
Wellcome to the wonderful world of unit testingWellcome to the wonderful world of unit testing
Wellcome to the wonderful world of unit testing
 

More from 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à
 
Presentacio Joomla Eupmt
Presentacio Joomla EupmtPresentacio Joomla Eupmt
Presentacio Joomla EupmtJordi Catà
 

More from 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
 
Flyer Netcoffee Imatge
Flyer Netcoffee ImatgeFlyer Netcoffee Imatge
Flyer Netcoffee Imatge
 
Presentacio Productivitat Tic
Presentacio Productivitat TicPresentacio Productivitat Tic
Presentacio Productivitat Tic
 
Presentacio Joomla Eupmt
Presentacio Joomla EupmtPresentacio Joomla Eupmt
Presentacio Joomla Eupmt
 

Volcanica2007

  • 1. Programació en PHP Jordi Catà Programació Avançada en PHP Jordi Catà Castillo - jordi.cata@dunlock.com Dunlock – Enginyeria Informàtica Volcànica 2007
  • 2. Objectius de la Xerrada Veure  algunes  llibreries  estandars  que  ens  permeten  organitzar  el  codi  de  maneres  més “interessants”. 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.
  • 3. Introducció Que és/pot ser desenvolupar en PHP ? ­ Programació sense ordre, sense cap tipus de disseny. ­ 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.
  • 4. Disseny 3 capes Físic Negoci HTML + Smarty Tags Presentació HTML + JavaScript
  • 5. 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.
  • 6. Capa presentació: 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
  • 7. Smarty, exemple plantilla.tpl Nom Usuari: {$NOM},{$COGNOM} <br> Contactes {section name=line loop=$DADES} <br> {$DADES[line].nom}, {$DADES[line].cognom} {/section} Sortida navegador Nom Usuari: Josep<br> Cognom Usuari: Foix <br> Contactes <br>Jordi, Mata <br>David, Folch <br>
  • 8. Smarty, configuració Smarty requereix 4 directoris per poder treballar: -TEMPLATE_DIR: directori on tenim els fitxers de “plantilles”. -COMPILE_DIR: directori on es “compila” les plantilles per poder-se “executar” de forma ràpida -CONFIG_DIR: directori on troba fitxers de configuració (constants smarty) -CACHE_DIR: directori de cache per les plantilles compilades Es important tenir permisos 777 ( a+wrx) en CACHE_DIR, COMPILE_DIR
  • 9. Smarty, configuració COMPILE_DIR CACHE_DIR /projecte/templates_c /projecte/cache TEMPLATE_DIR CONFIG_DIR /projecte/templates /projecte/config ->plantilla.tpl /projecte/ ->prova.php
  • 10. Smarty, configuració include 'Smarty.class.php'; define ('DIR_TEMPLATES' , ROOT_PATH .'templates/'); define ('DIR_CACHE' , ROOT_PATH .'cache/'); 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; $this->cache_dir = DIR_CACHE; $this->caching = false; } }
  • 11. Smarty, Utilització, Variables prova.php include “Smarty_template.php”; $smarty = new Smarty_template; $smarty->assign('NOM','Josep'); $smarty->assign('COGNOM','Pepet'); $smarty->display('plantilla.tpl'); -> mostrem la plantilla plantilla.tpl <html> <body> Nom: {$NOM}<br> Cognom: {$COGNOM} </body> </html>
  • 12. Smarty, Utilització, Exemple <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> Sortida Nom: Josep<br> Cognom: Cognom </body> </html>
  • 13. Smarty, Utilització, 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
  • 14. Smarty, Utilització, 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> Sortida Ets un admin Nom: Josep<br> Cognom: Cognom </body> </html>
  • 15. Smarty, Utilització, 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}
  • 16. Smarty, Utilització, Section {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
  • 17. Smarty, Utilització, fitxers de configuració 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}
  • 18. Smarty, Utilització, fitxers de configuració /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>
  • 19. Smarty, Utilització, 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 <body> Nom {$NOM}, Cognom: {$COGNOM} {include file=”peu_pagina.tpl”} </body> peu_pagina.tpl <div align=”center”> Peu de pàgina </div>
  • 20. Smarty, Utilització, includes <body> plantilla.tpl Nom {$NOM}, Cognom: {$COGNOM} {include file=”peu_pagina.tpl”} </body> $smarty = new Smarty_template ; $smarty->display (“plantilla.tpl”); prova.php <body> Nom Pepet, Cognom: Pepe Sortida <div align=”center”> Peu de pàgina </div> </body>
  • 21. Capa física: PEAR 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
  • 22. Capa física: PEAR, DataObject Exemple de codi sense utilitzar Pear $query = 'SELECT * FROM  my_table'; $link = mysql_connect('my_host', 'my_user', 'my_password'); mysql_select_db('my_database'); $result = mysql_query($query); $line = mysql_fetch_array($result) $link = pg_pconnect('host=host port=5432 dbname=database  user=user password=pwd'); $result = pg_query($link, $query);     $line = pg_fetch_result($result)    $link = Ora_Logon("my_user", "my_password"); $result = ora_do( $ora_conn, $query); ora_fetch_into( $result, $line);
  • 24. PEAR, Dataobject, generació 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.
  • 25. PEAR, Dataobject, generació Fitxer de configuració: /projecte/generate_do.ini [DB_DataObject] database = mysql://root:@localhost/basededades 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
  • 26. PEAR, Dataobject, generació El codi que ens genera el procés es com el següent: class DataObjects_Tusuaris extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ public $__table = 'tusuaris'; // table name public $CODI_USUARI; // int(10) not_null primary_key public $NOM; // string(50) public $COGNOM; // string(50) public $USUARI; // string(50) public $CLAU; // string(50) public $PERMISOS; // string(50) /* Static get */ function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('DataObjec /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE }
  • 27. PEAR, Dataobject, utilització <?php $opts = &PEAR::getStaticProperty('DB_DataObject','options'); $opts = array( 'class_location' => '/var/www/html/projects/classes/dbmapping', 'class_prefix' => 'DataObjects_', 'database' => 'mysql://usuari:password@localhost/basededades' ); $usuari = DB_DataObject::factory('tusuaris'); if ($usuari->get(12)) { echo "<br> usuari trobat"; } else { echo "No s'ha trobat el registre d'usuari amb id 12"; }
  • 28. PEAR, Dataobject, utilització $usuari = DB_DataObject::factory("tusuaris") $usuari->find(); ->executa "SELECT * FROM tusuaris"; $usuari = DB_DataObject::factory("tusuaris") $usuari->USUARI = "nom_usuari"; $usuari->CLAU = "contrasenya"; $usuari->find(); ->executa "SELECT * FROM tusuaris where USUARI = "nom_usuari" AND CLAU = "contrasenya"; $usuari = DB_DataObject::factory("tusuaris") $usuari->find(); while ($usuari->fetch ()) { echo "<br> nom usuari: " .$usuari->NOM_USUARI; }
  • 29. PEAR, Dataobject, utilització insert $usuari = DB_DataObject::factory("tusuaris") $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'); update $usuari = DB_DataObject::factory("tusuaris") $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';
  • 30. PEAR, Dataobject, utilització delete $usuari = DB_DataObject::factory("tusuaris") $usuari->USUARI = “pboch”; $usuari->delete (); ->DELETE FROM tusuaris WHERE USUARI = 'pboch'; orderBy $usuari = DB_DataObject::factory("tusuaris") $usuari->orderBy (“NOM, COGNOM”); $usuari->find (); ->SELECT * FROM tusuaris order by NOM, COGNOM
  • 31. PEAR, Dataobject, utilització setFrom assigna de forma automàtica valors del REQUEST a camps de l'objecte Dataobject if ($_REQUEST[“submit”] == “”) { ?> NOM USUARI: <input type=”text” name=”NOM”> COGNOM USUARI: <input type=”text” name=”COGNOM”> <? } else { $usuari = DB_DataObject::factory("tusuaris") $usuari->setFrom ($_REQUEST); $usuari->insert (); --> INSERT INTO tusuaris (NOM, COGNOM) VALUES (NOM_INTRODUIT, COGNOM_INTRODUIT) }
  • 32. PEAR, Dataobject, utilització getLink retorna el registre relacionat d'una altra taula, per exemple USUARI --> COTXE USUARI COTXE ID CODI_USUARI nom ID CODI_USUARI_FK MARCA 1 2 pepet 1 2 RENAULT Un usuari té associat 1 cotxes $usuari->get (1); -> SELECT * FROM USUARIS WHERE ID = 1; -> retorna el registre del usuari $cotxe = $usuari->getLink (“CODI_USUARI”, “COTXE”, “CODI_USUARI_FK”); -> SELECT * FROM COTXE WHERE CODI_USUARI_FK = 2;
  • 33. PEAR, Dataobject, utilització getLinks retorna els registres relacionats d'una forma automàtica a partir del fitxer databasename.links.ini [COTXE] CODI_USUARI_FK = USUARI:CODI_USUARI USUARI --> COTXE USUARI COTXE ID CODI_USUARI NOM ID CODI_USUARI_FK MARCA 1 2 pepet 1 2 RENAULT $cotxe = DB_DataObject::factory("COTXE") $cotxe->get (1); -> SELECT * FROM COTXE WHERE ID = 1; $cotxe->getLinks (); echo $cotxe->_USUARI->_NOM; -> Mostra el nom del usuari Associat al registre cotxe
  • 34. PEAR, Dataobject, utilització whereAdd, Count $person->name = "test"; $person->whereAdd("name like '%test%"); $total = $person->count(DB_DATAOBJECT_WHEREADD_ONLY); echo "There are {$total} names in the database"; SELECT count(person.id) AS DATAOBJECT_NUM FROM person WHERE name like '%test%';
  • 36. PEAR, altres HTML_QuickForm -> Sistema per generar formularis HTML via PHP DataObject_FormBuilder -> sistema per generar formularis a partir d'objectes Dataobject, es genera automaticament Altes/Baixes/Modificacions de registres...
  • 37. Programació en PHP Jordi Catà Gracies per la vostra atenció Programació Avançada en PHP Jordi Catà Castillo - jordi.cata@dunlock.com Dunlock – Enginyeria Informàtica Volcànica 2007