SlideShare une entreprise Scribd logo
1  sur  67
JAMP DAY 22 Maggio 2010 Relatori: Ruben Patanè Giampiero Ancilletta Università degli Studi di Roma "Tor Vergata"
[object Object],controller View Model JAMP implementa il pattern architetturale  Model-View-Controller
[object Object],PLUGIN Applicazioni Esterne DATA SOURCE Classi PHP OGGETTI Classi PHP Classi JS TEMPLATE File CSS Immagini Applicazioni Codice PHP Layout XML CORE Classi PHP Classi JS
[object Object],Gestione sorgenti XML Gestione Oggetti Gestione degli errori/eventi Gestione della Lingua Gestione Dati Upload / Download Datasource Formattazione dati Gestione Sistema Gestione  Output JSON PDF XML HTML Compressione Decompressione dati
[object Object],OGGETTO PHP JS CSS HTML PDF
[object Object],FORM CODICE (PHP) LAYOUT (XML)
[object Object],F O R M form1.php form1.xml
[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],EVENTI DEL FRAMEWORK PHP JAVASCRIPT DOM
[object Object],Gli eventi PHP entrano in gioco durante il caricamento della pagina. Sono eventi definiti dal framework e vengono generati in un determinato ordine a seconda della richiesta effettuata. Per intercettare un evento PHP basta scrivere nel file PHP la funzione con il nome dell'evento desiderato es: function   html_before_load () { ... }
PROCESSO DI CREAZIONE DI UNA PAGINA FASE 1:  creazione dell pagina LETTURA E CARICAMENTO  DEL LAYOUT XML  GENERAZIONE OUTPUT INIZIALIZZAZIONE  DEL FRAMEWORK LETTURA DATI LATO CLIENT POPOLAZIONE OGGETTI RICHIESTA AJAX DEL  FRAMEWORK PER  IL RECUPERO DEI DATI FASE 2:  caricamento dati
LETTURA E CARICAMENTO  DEL LAYOUT XML  GENERAZIONE OUTPUT html_before_load html_load html_after_load INIZIALIZZAZIONE  DEL FRAMEWORK Gli eventi PHP: Caricamento della pagina
[object Object]
[object Object],Richiesta WEB Caricamento classe System Lettura del sorgente XML Evento html_before_load Caricamento di tutti gli oggetti dal file xml Evento html_load
[object Object],Print del codice HTML Evento html_after_load
[object Object],Carica gli oggetti ds data_after_loadall() data_before_loadall() data_loadall() data_after() GET:form1.php?data=loadall data_before() data() PRINT XML/JSON
[object Object],[object Object],PrintXML Evento data_select_before return? false true Query di Selezione Evento data_select_after FINE DS seguente true false return? false true Generazione XML/JSON Out XML/JSON
[object Object]
[object Object],EVENTI PHP HTML DATA CUSTOM Gli eventi si differenziano dal tipo di richiesta effettuata.  - Gli eventi HTML sono quelle funzioni che restituiscono codice  HTML o PDF.  - Gli eventi DATA sono quelle funzioni che manipolano i dati e  restituiscono codice XML/XML+JSON.  - Gli eventi CUSTOM sono quelle funzioni dichiarate  dall'utente.
[object Object],GET:form.php html_before_load() Creazione oggetti html_load() Print codice HTML html_after_load() GET:form.php?objname=xxx html_before_rewrite() Creazione oggetto xxx html_rewrite(obj) Print codice HTML END html_after_rewrite()
[object Object],Carica gli oggetti ds data_after_loadall() data_before_loadall() data_loadall() data_after() GET:form.php?data=loadall data_before() data() END
[object Object],Carica gli oggetti ds data_after_load() data_before_load() data_load() data_after() GET:form.php?data=load data_before() data() END
[object Object],Carica gli oggetti ds data_after_new(obj) data_before_new() data_new(obj) data_last_multirequest() GET:form.php?data=new&... data_before() data() END data_after()
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]
[object Object],MODIFICARE OGGETTI function  html_load ()   {       global  $xml ;        $label1  =  $xml -> getObjById ( "label1" );        $label1 -> setProperty ( "value" ,  "Etichetta" );  }
[object Object],MODIFICARE DATASOURCE function  data_select_before ( $ds )  {       if ( $ds -> getPropertyName ( "id" )== "ds1" )  $ds -> setProperty ( "dswhere" ,  "`id` = 5" );  }
[object Object],AGGIUNGERE OGGETTI  function  html_load ()   {       global  $xml ;        $text1  =  $xml -> pageObj -> addChild ( "text1" ,  "text" );   }  function  html_load ()   {       global  $xml ;        $parent  =  $xml -> getObjById ( "div1" );          $parent -> addChild ( "text1" ,  "text" );          $parent -> insertBefore ( "text2" ,  "text" ,  "text1" );         $parent -> insertAfter ( "text3" ,  "text" ,  "text2" );        $parent -> removeChild ( "text2" );  }
[object Object],Vengono identificato come eventi Javascript tutti i metodi delle classe Javascript usate nel framework. addBeforeCustomFunction Esegue la funzione dell'utente prima del metodo della classe JAMP. In questo caso è possibile impedire l'esecuzione del metodo della classe JAMP facendo restituire "return false" alla funzione dell'utente. addAfterCustomFunction Esegue la funzione dell'utente dopo il metodo della classe JAMP.
[object Object],SYSTEMEVENT .addBeforeCustomFunction('class', 'function', 'myfunction'); .addAfterCustomFunction('class', 'function', 'myfunction'); Classe JAVASCRIPT addBeforeCustomFunction myFunction(param1,param2) metodo2(parm1) Classe JAVASCRIPT metodo1(parm1,parm2) metodo1(parm1,parm2) Classe JAVASCRIPT addAfterCustomFunction metodo1(parm1,parm2) myFunction(param1,param2)
[object Object]
[object Object]
[object Object]
[object Object],Con JAMP è possibile gestire gli eventi del Browser DOM2 tramite il PHP o Javascript indipendentemente dal Browser utilizzato. E' possibile creare degli eventi custom scaturiti da un evento DOM o da una chiamata diretta della funzione Javascript. Gli eventi custom vengono utilizzati da JAMP soprattutto per aggiornare gli oggetti legati al datasource. EVENTI DOM BASE CUSTOM
[object Object],Sono tutti gli eventi definiti dal DOM2:  http://www.w3.org/TR/DOM-Level-2-Events/ abort blur change click error focus load mousedown mousemove mouseout mouseover mouseup reset resize scroll select submit unload
[object Object],Il metodo  addEventListener  è implementato in ogni oggetto del framework. $obj- > addEventListener ( $id ,  $event ,  $function ,  $run  =  false ,  $param  =  null );
[object Object],$gridds -> addEventListener ( "gridds1_body" ,  "keydown" ,  "function(event) { gridds.keyDown('$id', event); }  " );  $gridds -> addEventListener ( "gridds1_body" ,  "keyup" ,  "function(event) { gridds.keyUp('$id', event); }  " ); $gridds -> addEventListener ( "gridds1_body" ,  "click" ,  "function() { gridds.setFocus('$id'); } " );
[object Object],La gestione degli eventi JAVASCRIPT sono affidati alla classe  SYSTEMEVENT. I metodi sono analoghi a quelli PHP.  Per inserire un evento in ascolto la sintassi è: SYSTEMEVENT- > addEventListener ( obj ,  eventname ,  fnz );
[object Object],function  myfunction() {     alert( 'hai fatto click!' ); } SYSTEMEVENT- > addEventListener ( $( 'text1' ) ,  “ click” ,  “ myfunction” );
[object Object],Oltre ad intercettare gli eventi da PHP è possibile creare dei veri e propri eventi personalizzati da richiamare allo scaturire di un determinato evento o chiamando semplicemente la funzione javascript.  addEventBefore( $id, $function, $call ) addEvent( $id, $function, $call ) addEventAfter( $id, $function, $call )   Function Listener Event Before Event Event After
[object Object]
[object Object]
[object Object]
[object Object],Text1 Text2 Combo1 ds1 (oggetto DS) MySQL MSSQL PostGreSQL Ldap ODBC CSV Filesystem Ftp IMAP Record SSH Xml
[object Object],ds1 (oggetto DS) Richiesta <?xml  version = &quot;1.0&quot;   encoding = &quot;utf-8&quot; ?> <data> <script> <![CDATA[ $('ds1').DSresult = [ {field1:&quot;value1&quot;,field2:&quot;value2&quot;}, {field1:&quot;value3&quot;,field2:&quot;value4&quot;}]; AJAX.setDsJSON('ds1',0,0,2,0); ]]> </script> </data> datasource
[object Object],Per utilizzare i datasource all'interno della propia pagina bisogna utilizzare l'oggetto DS:  <idtag  typeobj = &quot;ds&quot;   conn = &quot;conn6&quot;   dsdefault = &quot;jamp&quot;   dstable = &quot;partite&quot;   dskey = &quot;id&quot;  /> Modalità di salvataggio: table: salva tutti i dati della tabella. row: salva solo il record corrente. live: salva automaticamente i dati ad ogni cambiamento del record.
[object Object],Legare un oggetto ad un datasource: <idtag  typeobj = &quot;label&quot;   label = &quot;Label:&quot;   dsobj = &quot;dsname&quot;   dsitem = &quot;fieldname&quot;  /> idtag dsname
[object Object],function  data_select_before ( $ds )   {      global  $xml ;      if ( $ds -> getPropertyName ( &quot;id&quot; ) ==  &quot;ds1&quot; )       {           $result  = array();           $result [ 0 ][ &quot;field1&quot; ] =  &quot;value1&quot; ;           $result [ 0 ][ &quot;field2&quot; ] =  &quot;value2&quot; ;           $result [ 1 ][ &quot;field1&quot; ] =  &quot;value3&quot; ;           $result [ 1 ][ &quot;field2&quot; ] =  &quot;value4&quot; ;           $ds -> setProperty ( &quot;xml&quot; ,  $xml -> dataJSON ( $result ));              //$ds->setProperty(&quot;xml&quot;, $xml->dataXML($result));              return  false ;  // interrompe l'esecuzione del codice       }  }
[object Object],function  data_select_after ( $ds )   {      global  $xml ;       $i = 0 ;       $result  = array();      while( $ds -> ds -> dsGetRow ())      {           $result [ $i ][ 'field1' ] =  $ds -> ds -> property [ &quot;row&quot; ]-> field1 ;           $result [ $i ][ 'field2' ] =  $ds -> ds -> property [ &quot;row&quot; ]-> field2 ;          if ( $result [ $i ++][ 'field1' ]== &quot;value1&quot; )  $result [ $i ][ 'field3' ] =  &quot;YES&quot; ;          else  $result [ $i ++][ 'field3' ] =  &quot;NO&quot; ;      }       $out  =  $xml -> dataXML ( $result );       $ds -> setProperty ( &quot;xml&quot; ,  $out );  }
[object Object],Per datasource relazionale si intende la famiglia dei ds progettata per interfacciarsi a strutture dati di tipo relazionale, principalmente database relazionali. L'esigenze che si possono avere nell'effettuare delle richieste verso un database sono divese, per tale motivo il tag ds contiene più attributi dedicati alla loro gestione
[object Object],Connessione a una tabella del database: <ds1  typeobj = &quot;ds&quot;  conn = &quot;nomeconnessione&quot;   dsdefault = &quot;nomedatabase&quot;   dstable = &quot;nometabella&quot;   dskey = &quot;chiavetabella&quot;  /> Selezionare i campi di una tabella: <ds1  typeobj = &quot;ds&quot;   conn = &quot;nomeconnessione&quot;   dsdefault = &quot;nomedatabase&quot;   dstable = &quot;nometabella&quot;   dskey = &quot;chiavetabella&quot;   selecteditems = &quot;campo1,campo2&quot;   dswhere = &quot;campo1=5&quot;   dsorder = &quot;campo2&quot;   dslimit = &quot;50&quot;  />
[object Object],Tabella1 key1 item1 key1, item1, key2, id1, item2 <ds1  typeobj = &quot;ds&quot;   conn = &quot;nomeconnessione&quot;   dsdefault = &quot;nomedatabase&quot;   dstable = &quot;tabella1&quot;  join = &quot;tabella2&quot;  jointype = &quot;left&quot;   dskey = &quot;key&quot;   joinrule = &quot;(tabella1.key=tabella2.id1) /> Equivalente: <ds1  typeobj = &quot;ds&quot;   conn = &quot;nomeconnessione&quot;   dsdefault = &quot;nomedatabase&quot;   dstable = &quot;tabella1,tabella2&quot;   dskey = &quot;key&quot;   dswhere = &quot;(tabella1.key=tabella2.id1) /> Tabella2 key2 id1 item2 SELECT * FROM `tabella1` LEFT JOIN `tabella2` ON (`tabella1`.`key` = `tabella2`.`id1`) SELECT * FROM `tabella1`,`tabella2` WHERE `tabella1`.`key` = `tabella2`.`id1`
[object Object],Tabella1 key1 item1 Tabella2 id1 item2 Tabella3 id1 item3 <ds1  typeobj = &quot;ds&quot;   conn = &quot;connessione&quot;   dsdefault = &quot;database&quot;   dstable = &quot;tabella1&quot;   dskey = &quot;key1&quot;   dsrefresh = &quot;ds2,ds3&quot;   dslimit = &quot;10&quot; /> <ds2  typeobj = &quot;ds&quot;   conn = &quot;connesione&quot;   dsdefault = &quot;database&quot;   dstable = &quot;tabella2&quot;   dskey = &quot;key2&quot;   dsreferences = &quot;ds1&quot;   referenceskey = &quot;key1&quot;   foreignkey = &quot;id1&quot; /> <ds3  typeobj = &quot;ds&quot;   conn = &quot;connesione&quot;   dsdefault = &quot;database&quot;   dstable = &quot;tabella3&quot;   dskey = &quot;key3&quot;   dsreferences = &quot;ds1&quot;   referenceskey = &quot;key1&quot;   foreignkey = &quot;id1&quot; /> SELECT * FROM `tabella1`; SELECT * FROM `tabella2` WHERE `id1`= “key1”; SELECT * FROM `tabella3` WHERE `id1`= “key1”;
[object Object],Tabella1 key1 item1 Tabella2 key2 id1 item2 Tabella3 id2 item3 <ds1  typeobj = &quot;ds&quot;   conn = &quot;connessione&quot;   dsdefault = &quot;database&quot;   dstable = &quot;tabella1&quot;   dskey = &quot;key1&quot;   dsrefresh = &quot;ds2&quot;   dslimit = &quot;10&quot; /> <ds2  typeobj = &quot;ds&quot;   conn = &quot;connesione&quot;   dsdefault = &quot;database&quot;   dstable = &quot;tabella2&quot;   dskey = &quot;key2&quot;   dsreferences = &quot;ds1&quot;   referenceskey = &quot;key1&quot;   foreignkey = &quot;id1&quot;  dsrefresh =&quot;ds3&quot; /> <ds3  typeobj = &quot;ds&quot;   conn = &quot;connesione&quot;   dsdefault = &quot;database&quot;   dstable = &quot;tabella3&quot;   dskey = &quot;key3&quot;   dsreferences = &quot;ds2&quot;   referenceskey = &quot;key2&quot;   foreignkey = &quot;id2&quot; /> SELECT * FROM `tabella1`; SELECT * FROM `tabella2` WHERE `id1`= “key1”; SELECT * FROM `tabella3` WHERE `id2`= “key2”;
[object Object],Tabella1 key1 item1 Tabella2 key2 id1 item2 Tabella3 id1 id2 item3 <ds1  typeobj = &quot;ds&quot;   conn = &quot;connessione&quot;   dsdefault = &quot;database&quot;   dstable = &quot;tabella1&quot;   dskey = &quot;key1&quot;   dsrefresh = &quot;ds2,ds3&quot;   dslimit = &quot;10&quot; /> <ds2  typeobj = &quot;ds&quot;   conn = &quot;connesione&quot;   dsdefault = &quot;database&quot;   dstable = &quot;tabella2&quot;   dskey = &quot;key2&quot;   dsreferences = &quot;ds1&quot;   referenceskey = &quot;key1&quot;   foreignkey = &quot;id1&quot;  dsrefresh =&quot;ds3&quot; /> <ds3  typeobj = &quot;ds&quot;   conn = &quot;connesione&quot;   dsdefault = &quot;database&quot;   dstable = &quot;tabella3&quot;   dskey = &quot;key3&quot;  dsreferences = &quot;ds1,ds2&quot;   referenceskey = &quot;key1,key2&quot;   foreignkey = &quot;id1,id2&quot; /> SELECT * FROM `tabella1`; SELECT * FROM `tabella2` WHERE `id1`= “key1”; SELECT * FROM `tabella3`  WHERE `id1`= “key1” and `id2`= “key2” ;
[object Object],/** ************************************************ **/  /** ALIAS DS                                         **/  /** ************************************************ **/  $DS_ALIAS_ITEM [ &quot;sezioni&quot; ][ &quot;uno_tot&quot; ] =  &quot;(uno_m + uno_f)&quot; ;  $DS_ALIAS_ITEM [ &quot;sezioni&quot; ][ &quot;uno_per&quot; ] =  &quot;CONCAT(ROUND((uno_m + uno_f) * 100 / (maschi + femmine),2), '%')&quot; ;  $DS_ALIAS_ITEM [ &quot;sezioni&quot; ][ &quot;due_tot&quot; ] =  &quot;(due_m + due_f)&quot; ;  $DS_ALIAS_ITEM [ &quot;sezioni&quot; ][ &quot;due_per&quot; ] =  &quot;CONCAT(ROUND((due_m + due_f) * 100 / (maschi + femmine),2), '%')&quot; ;  $DS_ALIAS_ITEM [ &quot;sezioni&quot; ][ &quot;tre_tot&quot; ] =  &quot;(tre_m + tre_f)&quot; ;  $DS_ALIAS_ITEM [ &quot;abitanti&quot; ][ &quot;*&quot; ] =  &quot;`nome`,`cognome`&quot; ;  /** ************************************************ **/  $event -> managerRequest (); 
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],Sintassi: <idtag  typeobj = &quot;ds&quot;   conn = &quot;conn4&quot;   scope = &quot;onelevel&quot;   dskey = &quot;key&quot;   base = &quot;/jamp/data&quot;   dslimit = &quot;10&quot; /> Accesso a più rami: <idtag  typeobj = &quot;ds&quot;   conn = &quot;conn4&quot;   dsname = &quot;filename&quot; > <hierarchy>      <root1  base = &quot;/jamp/data/class&quot;   alias = &quot;Classi&quot;   scope = &quot;base&quot; />       <root2  base = &quot;/jamp/data/obj&quot;   alias = &quot;Oggetti&quot;   scope = &quot;base&quot; />   </hierarchy>          </idtag>
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],Gli Oggetti Le Lingue
[object Object],OGGETTO PHP JS CSS HTML PDF

Contenu connexe

En vedette

Westfield Southcenter
Westfield SouthcenterWestfield Southcenter
Westfield Southcenter
wesnic
 
Field assignment final
Field assignment finalField assignment final
Field assignment final
johnifors
 
Huw Davies Better By Design V3
Huw Davies Better By Design V3Huw Davies Better By Design V3
Huw Davies Better By Design V3
Marina111
 
人物 奧戴麗赫本
人物 奧戴麗赫本人物 奧戴麗赫本
人物 奧戴麗赫本
wise16888
 
Facebook, twitter och instagram - på Berghs 27 november 2013
Facebook, twitter och instagram - på Berghs 27 november 2013Facebook, twitter och instagram - på Berghs 27 november 2013
Facebook, twitter och instagram - på Berghs 27 november 2013
Hanna Metsis
 

En vedette (20)

Widening The Circle: Recruiting and Retaining Diverse Campers
Widening The Circle: Recruiting and Retaining Diverse CampersWidening The Circle: Recruiting and Retaining Diverse Campers
Widening The Circle: Recruiting and Retaining Diverse Campers
 
White Catalogue
White CatalogueWhite Catalogue
White Catalogue
 
Westfield Southcenter
Westfield SouthcenterWestfield Southcenter
Westfield Southcenter
 
TTT - Test, Tools and Tips - jug roma
TTT - Test, Tools and Tips - jug romaTTT - Test, Tools and Tips - jug roma
TTT - Test, Tools and Tips - jug roma
 
Titanic
TitanicTitanic
Titanic
 
Field assignment final
Field assignment finalField assignment final
Field assignment final
 
Lupis
LupisLupis
Lupis
 
Huw Davies Better By Design V3
Huw Davies Better By Design V3Huw Davies Better By Design V3
Huw Davies Better By Design V3
 
Bonsai GIS
Bonsai GISBonsai GIS
Bonsai GIS
 
Kort for hovedet - Kort fortalt - Artikel
Kort for hovedet - Kort fortalt - ArtikelKort for hovedet - Kort fortalt - Artikel
Kort for hovedet - Kort fortalt - Artikel
 
Af jord er du kommet
Af jord er du kommetAf jord er du kommet
Af jord er du kommet
 
Segredo Campaign
Segredo CampaignSegredo Campaign
Segredo Campaign
 
Symposium 2008
Symposium 2008Symposium 2008
Symposium 2008
 
Ambassador Whitney: Norway And The US Engaging In A New New World
Ambassador Whitney: Norway And The US Engaging In A New New WorldAmbassador Whitney: Norway And The US Engaging In A New New World
Ambassador Whitney: Norway And The US Engaging In A New New World
 
人物 奧戴麗赫本
人物 奧戴麗赫本人物 奧戴麗赫本
人物 奧戴麗赫本
 
Bosc Del Foganyer
Bosc Del FoganyerBosc Del Foganyer
Bosc Del Foganyer
 
Facebook, twitter och instagram - på Berghs 27 november 2013
Facebook, twitter och instagram - på Berghs 27 november 2013Facebook, twitter och instagram - på Berghs 27 november 2013
Facebook, twitter och instagram - på Berghs 27 november 2013
 
II GM
II GMII GM
II GM
 
Podcasting In Education
Podcasting In EducationPodcasting In Education
Podcasting In Education
 
Feg
FegFeg
Feg
 

Similaire à JAMP DAY 2010 - ROMA (3)

Rich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryRich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in Jquery
Alberto Buschettu
 
02 Struts Actions3016
02 Struts Actions301602 Struts Actions3016
02 Struts Actions3016
DavideBos
 
02 Struts Actions3016
02 Struts Actions301602 Struts Actions3016
02 Struts Actions3016
DavideBos
 
Pycon Jungle
Pycon JunglePycon Jungle
Pycon Jungle
guest6b08a5
 
S.P.R.I.Te. magazine n.6
S.P.R.I.Te. magazine n.6S.P.R.I.Te. magazine n.6
S.P.R.I.Te. magazine n.6
Elvis London
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuery
Sandro Marcon
 

Similaire à JAMP DAY 2010 - ROMA (3) (20)

Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
 
Web Performance Optimization
Web Performance OptimizationWeb Performance Optimization
Web Performance Optimization
 
Write less do more...with jQuery
Write less do more...with jQueryWrite less do more...with jQuery
Write less do more...with jQuery
 
Rich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryRich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in Jquery
 
02 Struts Actions3016
02 Struts Actions301602 Struts Actions3016
02 Struts Actions3016
 
02 Struts Actions3016
02 Struts Actions301602 Struts Actions3016
02 Struts Actions3016
 
02 Struts Actions
02  Struts  Actions02  Struts  Actions
02 Struts Actions
 
Pycon Jungle
Pycon JunglePycon Jungle
Pycon Jungle
 
Corso di php01
Corso di php01Corso di php01
Corso di php01
 
S.P.R.I.Te. magazine n.6
S.P.R.I.Te. magazine n.6S.P.R.I.Te. magazine n.6
S.P.R.I.Te. magazine n.6
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 
Js intro
Js introJs intro
Js intro
 
Html5 e PHP
Html5 e PHPHtml5 e PHP
Html5 e PHP
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuery
 
Programmazione Ad Eventi In Php
Programmazione Ad Eventi In PhpProgrammazione Ad Eventi In Php
Programmazione Ad Eventi In Php
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Oo Javascript
Oo JavascriptOo Javascript
Oo Javascript
 
Java Advanced
Java AdvancedJava Advanced
Java Advanced
 
Simone Carletti: Zend Framework ed i Web Service
Simone Carletti: Zend Framework ed i Web ServiceSimone Carletti: Zend Framework ed i Web Service
Simone Carletti: Zend Framework ed i Web Service
 
Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8
 

JAMP DAY 2010 - ROMA (3)

  • 1. JAMP DAY 22 Maggio 2010 Relatori: Ruben Patanè Giampiero Ancilletta Università degli Studi di Roma &quot;Tor Vergata&quot;
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. PROCESSO DI CREAZIONE DI UNA PAGINA FASE 1: creazione dell pagina LETTURA E CARICAMENTO DEL LAYOUT XML GENERAZIONE OUTPUT INIZIALIZZAZIONE DEL FRAMEWORK LETTURA DATI LATO CLIENT POPOLAZIONE OGGETTI RICHIESTA AJAX DEL FRAMEWORK PER IL RECUPERO DEI DATI FASE 2: caricamento dati
  • 13. LETTURA E CARICAMENTO DEL LAYOUT XML GENERAZIONE OUTPUT html_before_load html_load html_after_load INIZIALIZZAZIONE DEL FRAMEWORK Gli eventi PHP: Caricamento della pagina
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.

Notes de l'éditeur

  1. il model fornisce i metodi per accedere ai dati il view visualizza i dati contenuti nel model e si occupa dell&apos;interazione con utenti e agenti; il controller riceve i comandi dell&apos;utente (in genere attraverso il view).
  2. Il Core Il core è formato da classi distinte specifiche per ogni tipo di funzione da svolgere. Le classi interagiscono fra di loro ma consentono una chiara lettura del codice. Il core viene attivato includendo la classe system all&apos;interno della propria pagina php. Alla richiesta della pagina da parte del browser, il core, si occupa di recuperare le impostazioni del framework, di leggerre il sorgente xml (layout), di istanziare gli oggetti, di richiedere i dati e d restituito l&apos;output nel formato richiesto: HTML o PDF. Applicazioni Le applicazioni, per convenzione, sono posizionate nella directory /frm. Ogni pagina può essere considerata come un form della nostra applicazione. Il form è formato da due file uno php e l&apos;altro xml. Il file php contiene la sintassi php e/o javascript, il file xml contiene il codice del layout del form. Tale distinzione consente di avere una netta separazione fra il codice e l&apos;interfaccia grafica. Plugins I plugins sono applicazioni esterne a JAMP, indipendenti e scritte da utenti esterni al team di JAMP. Tali applicazioni, anche se non sono state scritte per il framework, possono interagire con JAMP. I plugins forniti possono variare da release a release.
  3. Spiego i singoli blochi
  4. Gli oggetti Gli oggetti sono indipendenti dal framework, questo significa che l&apos;utente può scrivere e implementare nuovi oggetti a seconda delle sue necessità. Ogni oggetto è formato da un file php, da un file javascript e da un file css. Il file PHP si occupa della generazione del codice HTML da restituire nella pagina e di generare il codice per la visualizzazione nei PDF. Il file javascript, opzionale, consente la lettura e scrittura da datasource e/o implementa funzioni utilizzate dall&apos;oggetto. Il file css, opzionale, consente impostare il foglio di style per l&apos;oggetto.
  5. I form sono formati da due file, il primo contiene il codice php della pagina e il secondo contiene il codice degli oggetti utilizzati.
  6. require_once(&amp;quot;./../../class/system.class.php&amp;quot;); Include il framework nella pagina php. $system = new ClsSystem(true); Attiva i metodi del framework, la proprietà true/false esegue/non esegue il carimanento della configurazione. $xml = new ClsXML(&amp;quot;form1.xml&amp;quot;); Esegue il caricamento del layout della form. $event = new ClsEvent($xml); Abilita e inoltra il form al gestore degli eventi php. $event-&gt;managerRequest(); Gestisce le richieste della pagina.
  7. Gli eventi son il fulcro del funzionamento di JAMP. Gli eventi gestibili dal framework sono di tre tipi: Gli eventi PHP Gli eventi JAVASCRIPT Gli eventi DOM (Javascript) Gli eventi in generale possono essere scritti sia con metodi php sia con metodi javascript a seconda di dove vengono implementati. Generalmente gli eventi PHP e JAVASCRIPT sono gli eventi generati dal framework, invece gli eventi DOM sono gli eventi DOM 2 del browser e quindi della pagina HTML. Gli eventi possono essere intercettati e gestiti dall&apos;utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  8. require_once(&amp;quot;./../../class/system.class.php&amp;quot;); Include il framework nella pagina php. $system = new ClsSystem(true); Attiva i metodi del framework, la proprietà true/false esegue/non esegue il carimanento della configurazione. $xml = new ClsXML(&amp;quot;form1.xml&amp;quot;); Esegue il caricamento del layout della form. $event = new ClsEvent($xml); Abilita e inoltra il form al gestore degli eventi php. $event-&gt;managerRequest(); Gestisce le richieste della pagina.
  9. Gli eventi son il fulcro del funzionamento di JAMP. Gli eventi gestibili dal framework sono di tre tipi: Gli eventi PHP Gli eventi JAVASCRIPT Gli eventi DOM (Javascript) Gli eventi in generale possono essere scritti sia con metodi php sia con metodi javascript a seconda di dove vengono implementati. Generalmente gli eventi PHP e JAVASCRIPT sono gli eventi generati dal framework, invece gli eventi DOM sono gli eventi DOM 2 del browser e quindi della pagina HTML. Gli eventi possono essere intercettati e gestiti dall&apos;utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  10. Gli eventi son il fulcro del funzionamento di JAMP. Gli eventi gestibili dal framework sono di tre tipi: Gli eventi PHP Gli eventi JAVASCRIPT Gli eventi DOM (Javascript) Gli eventi in generale possono essere scritti sia con metodi php sia con metodi javascript a seconda di dove vengono implementati. Generalmente gli eventi PHP e JAVASCRIPT sono gli eventi generati dal framework, invece gli eventi DOM sono gli eventi DOM 2 del browser e quindi della pagina HTML. Gli eventi possono essere intercettati e gestiti dall&apos;utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  11. Gli eventi son il fulcro del funzionamento di JAMP. Gli eventi gestibili dal framework sono di tre tipi: Gli eventi PHP Gli eventi JAVASCRIPT Gli eventi DOM (Javascript) Gli eventi in generale possono essere scritti sia con metodi php sia con metodi javascript a seconda di dove vengono implementati. Generalmente gli eventi PHP e JAVASCRIPT sono gli eventi generati dal framework, invece gli eventi DOM sono gli eventi DOM 2 del browser e quindi della pagina HTML. Gli eventi possono essere intercettati e gestiti dall&apos;utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  12. Gli eventi son il fulcro del funzionamento di JAMP. Gli eventi gestibili dal framework sono di tre tipi: Gli eventi PHP Gli eventi JAVASCRIPT Gli eventi DOM (Javascript) Gli eventi in generale possono essere scritti sia con metodi php sia con metodi javascript a seconda di dove vengono implementati. Generalmente gli eventi PHP e JAVASCRIPT sono gli eventi generati dal framework, invece gli eventi DOM sono gli eventi DOM 2 del browser e quindi della pagina HTML. Gli eventi possono essere intercettati e gestiti dall&apos;utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  13. Gli eventi son il fulcro del funzionamento di JAMP. Gli eventi gestibili dal framework sono di tre tipi: Gli eventi PHP Gli eventi JAVASCRIPT Gli eventi DOM (Javascript) Gli eventi in generale possono essere scritti sia con metodi php sia con metodi javascript a seconda di dove vengono implementati. Generalmente gli eventi PHP e JAVASCRIPT sono gli eventi generati dal framework, invece gli eventi DOM sono gli eventi DOM 2 del browser e quindi della pagina HTML. Gli eventi possono essere intercettati e gestiti dall&apos;utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  14. Gli eventi son il fulcro del funzionamento di JAMP. Gli eventi gestibili dal framework sono di tre tipi: Gli eventi PHP Gli eventi JAVASCRIPT Gli eventi DOM (Javascript) Gli eventi in generale possono essere scritti sia con metodi php sia con metodi javascript a seconda di dove vengono implementati. Generalmente gli eventi PHP e JAVASCRIPT sono gli eventi generati dal framework, invece gli eventi DOM sono gli eventi DOM 2 del browser e quindi della pagina HTML. Gli eventi possono essere intercettati e gestiti dall&apos;utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  15. Gli eventi son il fulcro del funzionamento di JAMP. Gli eventi gestibili dal framework sono di tre tipi: Gli eventi PHP Gli eventi JAVASCRIPT Gli eventi DOM (Javascript) Gli eventi in generale possono essere scritti sia con metodi php sia con metodi javascript a seconda di dove vengono implementati. Generalmente gli eventi PHP e JAVASCRIPT sono gli eventi generati dal framework, invece gli eventi DOM sono gli eventi DOM 2 del browser e quindi della pagina HTML. Gli eventi possono essere intercettati e gestiti dall&apos;utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  16. Gli eventi son il fulcro del funzionamento di JAMP. Gli eventi gestibili dal framework sono di tre tipi: Gli eventi PHP Gli eventi JAVASCRIPT Gli eventi DOM (Javascript) Gli eventi in generale possono essere scritti sia con metodi php sia con metodi javascript a seconda di dove vengono implementati. Generalmente gli eventi PHP e JAVASCRIPT sono gli eventi generati dal framework, invece gli eventi DOM sono gli eventi DOM 2 del browser e quindi della pagina HTML. Gli eventi possono essere intercettati e gestiti dall&apos;utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  17. Gli eventi son il fulcro del funzionamento di JAMP. Gli eventi gestibili dal framework sono di tre tipi: Gli eventi PHP Gli eventi JAVASCRIPT Gli eventi DOM (Javascript) Gli eventi in generale possono essere scritti sia con metodi php sia con metodi javascript a seconda di dove vengono implementati. Generalmente gli eventi PHP e JAVASCRIPT sono gli eventi generati dal framework, invece gli eventi DOM sono gli eventi DOM 2 del browser e quindi della pagina HTML. Gli eventi possono essere intercettati e gestiti dall&apos;utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  18. Gli eventi son il fulcro del funzionamento di JAMP. Gli eventi gestibili dal framework sono di tre tipi: Gli eventi PHP Gli eventi JAVASCRIPT Gli eventi DOM (Javascript) Gli eventi in generale possono essere scritti sia con metodi php sia con metodi javascript a seconda di dove vengono implementati. Generalmente gli eventi PHP e JAVASCRIPT sono gli eventi generati dal framework, invece gli eventi DOM sono gli eventi DOM 2 del browser e quindi della pagina HTML. Gli eventi possono essere intercettati e gestiti dall&apos;utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  19. La funzione scritta dall&apos;utente potrà avere gli stessi parametri della funzione intercettata in quanto saranno inoltrati automaticamente.
  20. La classe SYSTEMEVENT per intercettare l&apos;evento rinomina il metodo aggiungendo il prefisso “__” e riscrive il metodo aggiungendo la chiamata alla funzione definita dall&apos;utente inoltrando tutti i parametri della chiamata. A seconda del metodo di intercettazione utilizzato addBeforeCustomFunction o addAfterCustomFunction il metodo originale della classe viene richiamato dopo o prima della funzione dell&apos;utente.
  21. La classe SYSTEMEVENT per intercettare l&apos;evento rinomina il metodo aggiungendo il prefisso “__” e riscrive il metodo aggiungendo la chiamata alla funzione definita dall&apos;utente inoltrando tutti i parametri della chiamata. A seconda del metodo di intercettazione utilizzato addBeforeCustomFunction o addAfterCustomFunction il metodo originale della classe viene richiamato dopo o prima della funzione dell&apos;utente.
  22. La classe SYSTEMEVENT per intercettare l&apos;evento rinomina il metodo aggiungendo il prefisso “__” e riscrive il metodo aggiungendo la chiamata alla funzione definita dall&apos;utente inoltrando tutti i parametri della chiamata. A seconda del metodo di intercettazione utilizzato addBeforeCustomFunction o addAfterCustomFunction il metodo originale della classe viene richiamato dopo o prima della funzione dell&apos;utente.
  23. La classe SYSTEMEVENT per intercettare l&apos;evento rinomina il metodo aggiungendo il prefisso “__” e riscrive il metodo aggiungendo la chiamata alla funzione definita dall&apos;utente inoltrando tutti i parametri della chiamata. A seconda del metodo di intercettazione utilizzato addBeforeCustomFunction o addAfterCustomFunction il metodo originale della classe viene richiamato dopo o prima della funzione dell&apos;utente.
  24. La funzione scritta dall&apos;utente potrà avere gli stessi parametri della funzione intercettata in quanto saranno inoltrati automaticamente.
  25. La funzione scritta dall&apos;utente potrà avere gli stessi parametri della funzione intercettata in quanto saranno inoltrati automaticamente.
  26. $id E&apos; l&apos;id dell&apos;oggetto nel quale si vuole aggiungere un evento in ascolto incluso ma può indicare anche l&apos;oggetto document e window . $event Nome dell&apos;evento da intercettare. Accetta eventi base ed eventi custom . $function Funzione scaturita dall&apos;evento. $run Opzionale, se true scaturisce l&apos;evento al caricamento della pagina $param Opzionale, consente di specificare i parametri da passare alla funzione associata all&apos;evento.
  27. Per creare un evento custom prima di tutto si deve inserire un listener e nel parametro function si deve inserire il nome della funzione e non la funzione. Per accodare gli eventi alla funzione appena creata si utilizzano i seguenti metodi: $id E&apos; l&apos;id dell&apos;oggetto nel quale si vuole aggiungere un evento in ascolto. $function Nome della funzione dichiarata in addEventListener $call Istruzione o funzione da eseguire alla generazione dell&apos;evento. Le tre funzioni addEvent consentono di raggruppare le funzioni da eseguirle in tre momenti diversi dell&apos;evento.
  28. I datasource sono una collezione di classi PHP create per gestire i dati ossia leggere, modificare, inserire ed eliminare dati da una determinata fonte, per ogni tipologia di sorgente dati esiste una classe dedicata. Il datasource può essere considerato come una sorta di interfaccia tra la fonte di dati e gli oggetti, lo scopo principale è quello di rendere trasparente al controllo l&apos;interazione con la fonte di dati. Per poter utilizzare i datasource bisogna prima di tutto creare una stringa di connessione nel file conf/conn.inc.php con relativi parametri di connessione. JAMP può interagire con diversi tipi di strutture dati come database, filesystem, file xml, tracciati record, LDAP e altre che verranno sviluppate.
  29. * Filesystem // dev device number // ino inode number * // mode inode protection mode // nlink number of links // uid userid of owner * // gid groupid of owner * // rdev device type, if inode device // size size in bytes // atime time of last access (Unix timestamp) // mtime time of last modification (Unix timestamp) // ctime time of last inode change (Unix timestamp) // blksize blocksize of filesystem IO ** // blocks number of blocks allocated ** // md5 md5 checksum * On Windows this will always be 0. ** Only valid on systems supporting the st_blksize type - other systems (e.g. Windows) return -1. * ftp // perms permissions // number inode number * // owner userid of owner // group group of owner // size size in bytes // datetime datatime m-d H:i // md5 md5 checksum * On Windows this will always be 0. * ssh // perms permissions // number inode number * // owner userid of owner // group group of owner // size size in bytes // datetime datatime m-d H:i // md5 md5 checksum
  30. Gli oggetti Gli oggetti sono indipendenti dal framework, questo significa che l&apos;utente può scrivere e implementare nuovi oggetti a seconda delle sue necessità. Ogni oggetto è formato da un file php, da un file javascript e da un file css. Il file PHP si occupa della generazione del codice HTML da restituire nella pagina e di generare il codice per la visualizzazione nei PDF. Il file javascript, opzionale, consente la lettura e scrittura da datasource e/o implementa funzioni utilizzate dall&apos;oggetto. Il file css, opzionale, consente impostare il foglio di style per l&apos;oggetto.