JAMP DAY 2010 - ROMA (3)

663 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
663
On SlideShare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • il model fornisce i metodi per accedere ai dati il view visualizza i dati contenuti nel model e si occupa dell'interazione con utenti e agenti; il controller riceve i comandi dell'utente (in genere attraverso il view).
  • 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'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'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'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'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.
  • Spiego i singoli blochi
  • Gli oggetti Gli oggetti sono indipendenti dal framework, questo significa che l'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'oggetto. Il file css, opzionale, consente impostare il foglio di style per l'oggetto.
  • I form sono formati da due file, il primo contiene il codice php della pagina e il secondo contiene il codice degli oggetti utilizzati.
  • require_once("./../../class/system.class.php"); 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("form1.xml"); Esegue il caricamento del layout della form. $event = new ClsEvent($xml); Abilita e inoltra il form al gestore degli eventi php. $event->managerRequest(); Gestisce le richieste della pagina.
  • 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'utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  • require_once("./../../class/system.class.php"); 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("form1.xml"); Esegue il caricamento del layout della form. $event = new ClsEvent($xml); Abilita e inoltra il form al gestore degli eventi php. $event->managerRequest(); Gestisce le richieste della pagina.
  • 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'utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  • 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'utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  • 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'utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  • 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'utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  • 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'utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  • 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'utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  • 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'utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  • 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'utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  • 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'utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  • 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'utente. Inoltre, per gli eventi JAVASCRIPT, JAMP fornisce un sistema molto potente in grado di intercettare qualsiasi metodo di una classe scritta in JAVASCRIPT.
  • La funzione scritta dall'utente potrà avere gli stessi parametri della funzione intercettata in quanto saranno inoltrati automaticamente.
  • La classe SYSTEMEVENT per intercettare l'evento rinomina il metodo aggiungendo il prefisso “__” e riscrive il metodo aggiungendo la chiamata alla funzione definita dall'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'utente.
  • La classe SYSTEMEVENT per intercettare l'evento rinomina il metodo aggiungendo il prefisso “__” e riscrive il metodo aggiungendo la chiamata alla funzione definita dall'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'utente.
  • La classe SYSTEMEVENT per intercettare l'evento rinomina il metodo aggiungendo il prefisso “__” e riscrive il metodo aggiungendo la chiamata alla funzione definita dall'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'utente.
  • La classe SYSTEMEVENT per intercettare l'evento rinomina il metodo aggiungendo il prefisso “__” e riscrive il metodo aggiungendo la chiamata alla funzione definita dall'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'utente.
  • La funzione scritta dall'utente potrà avere gli stessi parametri della funzione intercettata in quanto saranno inoltrati automaticamente.
  • La funzione scritta dall'utente potrà avere gli stessi parametri della funzione intercettata in quanto saranno inoltrati automaticamente.
  • $id E' l'id dell'oggetto nel quale si vuole aggiungere un evento in ascolto incluso ma può indicare anche l'oggetto document e window . $event Nome dell'evento da intercettare. Accetta eventi base ed eventi custom . $function Funzione scaturita dall'evento. $run Opzionale, se true scaturisce l'evento al caricamento della pagina $param Opzionale, consente di specificare i parametri da passare alla funzione associata all'evento.
  • 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' l'id dell'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'evento. Le tre funzioni addEvent consentono di raggruppare le funzioni da eseguirle in tre momenti diversi dell'evento.
  • 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'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.
  • * 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
  • Gli oggetti Gli oggetti sono indipendenti dal framework, questo significa che l'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'oggetto. Il file css, opzionale, consente impostare il foglio di style per l'oggetto.
  • JAMP DAY 2010 - ROMA (3)

    1. 1. JAMP DAY 22 Maggio 2010 Relatori: Ruben Patanè Giampiero Ancilletta Università degli Studi di Roma "Tor Vergata"
    2. 2. <ul><li>SCHEMA DI PROGETTAZIONE MVC </li></ul>controller View Model JAMP implementa il pattern architetturale Model-View-Controller
    3. 3. <ul><li>L'architettura del Framework </li></ul>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
    4. 4. <ul><li>Schema a blocchi del CORE </li></ul>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
    5. 5. <ul><li>Gli Oggetti </li></ul>OGGETTO PHP JS CSS HTML PDF
    6. 6. <ul><li>I Form </li></ul>FORM CODICE (PHP) LAYOUT (XML)
    7. 7. <ul><li>I Form </li></ul>F O R M form1.php form1.xml
    8. 8. <ul><li>GLI EVENTI </li></ul>
    9. 9. <ul><li>Introduzione agli eventi </li></ul><ul><li>JAMP utilizza il paradigma della programmazione ad eventi. </li></ul><ul><li>Il flusso del programma è quindi largamente determinato dal verificarsi di eventi esterni. </li></ul><ul><li>Gli eventi si possono classificare in: </li></ul><ul><li>Eventi server-side: eventi PHP normalmente generati dal framework‏ </li></ul><ul><li>Eventi client-side: eventi javascript normalmente generati dall'azione dell'utente. </li></ul>
    10. 10. <ul><li>Introduzione agli eventi </li></ul>EVENTI DEL FRAMEWORK PHP JAVASCRIPT DOM
    11. 11. <ul><li>Gli eventi PHP </li></ul>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 () { ... }
    12. 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. 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. 14. <ul><li>Gli eventi PHP: esempio </li></ul>
    15. 15. <ul><li>Gli eventi PHP: esempio </li></ul>Richiesta WEB Caricamento classe System Lettura del sorgente XML Evento html_before_load Caricamento di tutti gli oggetti dal file xml Evento html_load
    16. 16. <ul><li>Gli eventi PHP: esempio </li></ul>Print del codice HTML Evento html_after_load
    17. 17. <ul><li>Gli eventi PHP: esempio, richiesta dati </li></ul>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
    18. 18. <ul><li>Gli eventi PHP: esempio, </li></ul><ul><li>restituzione dati </li></ul>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
    19. 19. <ul><li>Gli eventi PHP: esempio, i dati vengono elaborati dal browser e caricati dagli oggetti </li></ul>
    20. 20. <ul><li>Gli eventi PHP disponibili </li></ul>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.
    21. 21. <ul><li>Gli eventi PHP disponibili: HTML </li></ul>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()
    22. 22. <ul><li>Gli eventi PHP disponibili: DATA </li></ul>Carica gli oggetti ds data_after_loadall() data_before_loadall() data_loadall() data_after() GET:form.php?data=loadall data_before() data() END
    23. 23. <ul><li>Gli eventi PHP disponibili: DATA </li></ul>Carica gli oggetti ds data_after_load() data_before_load() data_load() data_after() GET:form.php?data=load data_before() data() END
    24. 24. <ul><li>Gli eventi PHP disponibili: DATA </li></ul>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()
    25. 25. <ul><li>Gli eventi PHP disponibili: DATA </li></ul><ul><li>data </li></ul><ul><li>data_loadall </li></ul><ul><li>data_load </li></ul><ul><li>data_new </li></ul><ul><li>data_update </li></ul><ul><li>data_delete </li></ul><ul><li>data_deleteall </li></ul><ul><li>data_login </li></ul><ul><li>data_changepasswd </li></ul><ul><li>data_store </li></ul><ul><li>data_keepalive </li></ul><ul><li>data_last_multirequest </li></ul><ul><li>data_select </li></ul>
    26. 26. <ul><li>Gli eventi PHP disponibili: CUSTOM </li></ul><ul><li>Gli eventi custom sono delle richieste data non definite dal framework. Il nome dell'evento viene indicato dall'utente nel POST es: data=myfunction l'evento si chiamerà myfunction. </li></ul><ul><li><?php function  myfunction ()  { ... </li></ul><ul><li>} ?> </li></ul>
    27. 27. <ul><li>Uso degli eventi PHP </li></ul>MODIFICARE OGGETTI function  html_load ()  {      global  $xml ;       $label1  =  $xml -> getObjById ( &quot;label1&quot; );       $label1 -> setProperty ( &quot;value&quot; ,  &quot;Etichetta&quot; ); }
    28. 28. <ul><li>Uso degli eventi PHP </li></ul>MODIFICARE DATASOURCE function  data_select_before ( $ds ) {     if ( $ds -> getPropertyName ( &quot;id&quot; )== &quot;ds1&quot; )  $ds -> setProperty ( &quot;dswhere&quot; ,  &quot;`id` = 5&quot; ); }
    29. 29. <ul><li>Uso degli eventi PHP </li></ul>AGGIUNGERE OGGETTI function  html_load ()  {      global  $xml ;       $text1  =  $xml -> pageObj -> addChild ( &quot;text1&quot; ,  &quot;text&quot; );  } function  html_load ()  {      global  $xml ;       $parent  =  $xml -> getObjById ( &quot;div1&quot; );         $parent -> addChild ( &quot;text1&quot; ,  &quot;text&quot; );         $parent -> insertBefore ( &quot;text2&quot; ,  &quot;text&quot; ,  &quot;text1&quot; );        $parent -> insertAfter ( &quot;text3&quot; ,  &quot;text&quot; ,  &quot;text2&quot; );       $parent -> removeChild ( &quot;text2&quot; ); }
    30. 30. <ul><li>Gli eventi Javascript </li></ul>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 &quot;return false&quot; alla funzione dell'utente. addAfterCustomFunction Esegue la funzione dell'utente dopo il metodo della classe JAMP.
    31. 31. <ul><li>Gli eventi Javascript </li></ul>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)
    32. 32. <ul><li>Gli eventi Javascript: esempio </li></ul>
    33. 33. <ul><li>Gli eventi Javascript: esempio </li></ul>
    34. 34. <ul><li>Gli eventi Javascript: esempio </li></ul>
    35. 35. <ul><li>Gli eventi DOM </li></ul>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
    36. 36. <ul><li>Gli eventi DOM: BASE </li></ul>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
    37. 37. <ul><li>Intercettare gli eventi DOM2 da PHP </li></ul>Il metodo addEventListener è implementato in ogni oggetto del framework. $obj- > addEventListener ( $id ,  $event ,  $function ,  $run  =  false ,  $param  =  null );
    38. 38. <ul><li>Intercettare gli eventi DOM2 da PHP </li></ul>$gridds -> addEventListener ( &quot;gridds1_body&quot; ,  &quot;keydown&quot; ,  &quot;function(event) { gridds.keyDown('$id', event); }  &quot; ); $gridds -> addEventListener ( &quot;gridds1_body&quot; ,  &quot;keyup&quot; ,  &quot;function(event) { gridds.keyUp('$id', event); }  &quot; ); $gridds -> addEventListener ( &quot;gridds1_body&quot; ,  &quot;click&quot; ,  &quot;function() { gridds.setFocus('$id'); } &quot; );
    39. 39. <ul><li>Intercettare gli eventi DOM2 da Javascript </li></ul>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 );
    40. 40. <ul><li>Intercettare gli eventi DOM2 da Javascript </li></ul>function myfunction() {     alert( 'hai fatto click!' ); } SYSTEMEVENT- > addEventListener ( $( 'text1' ) ,  “ click” ,  “ myfunction” );
    41. 41. <ul><li>Gli eventi DOM: CUSTOM (solo PHP) </li></ul>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
    42. 42. <ul><li>Gli eventi DOM: CUSTOM </li></ul>
    43. 43. <ul><li>Gli eventi DOM: CUSTOM </li></ul>
    44. 44. <ul><li>I DATASOURCE </li></ul>
    45. 45. <ul><li>I Datasource </li></ul>Text1 Text2 Combo1 ds1 (oggetto DS) MySQL MSSQL PostGreSQL Ldap ODBC CSV Filesystem Ftp IMAP Record SSH Xml
    46. 46. <ul><li>I Datasource </li></ul>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
    47. 47. <ul><li>I Datasource: Uso dei DS </li></ul>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.
    48. 48. <ul><li>I Datasource: Uso dei DS </li></ul>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
    49. 49. <ul><li>I Datasource: Accesso al DS lato server </li></ul>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      } }
    50. 50. <ul><li>I Datasource: Accesso al DS lato server </li></ul>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 ); }
    51. 51. <ul><li>I Datasource: Relazionali </li></ul>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
    52. 52. <ul><li>I Datasource: Relazionali </li></ul>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; />
    53. 53. <ul><li>I Datasource: Relazionali, JOIN </li></ul>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`
    54. 54. <ul><li>I Datasource: Relazionali, chiavi esterne </li></ul>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”;
    55. 55. <ul><li>I Datasource: Relazionali, chiavi esterne </li></ul>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”;
    56. 56. <ul><li>I Datasource: Relazionali, chiavi esterne </li></ul>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” ;
    57. 57. <ul><li>I Datasource: Relazionali, alias </li></ul>/** ************************************************ **/ /** 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 (); 
    58. 58. <ul><li>I Datasource: Gerarchici </li></ul><ul><li>Per datasource gerarchici si intende la famiglia dei ds progettata per interfacciarsi a strutture dati nidificate come filesystem, file xml, ldap. </li></ul><ul><li>base : percorso da cui iniziare la ricerca </li></ul><ul><li>scope : profondità di ricerca a partire dal valore specificato nell'attributo base </li></ul><ul><li>filter : filtro per ottenere un sottoinsieme dei risultati. </li></ul><ul><li>justthese : restituisce solo i campi specificati. </li></ul><ul><li>alias : il nome da dare al nodo root, se non specificato gli verrà assegnato quando definito nell'attributo base </li></ul>
    59. 59. <ul><li>I Datasource: Gerarchici </li></ul>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>
    60. 60. <ul><li>I Datasource: Gerarchici, base </li></ul><ul><li>Filesystem : come un normale path di un filesystem(es. /var/www in ambiente UNIX o c:php in ambiente Windows) </li></ul><ul><li>File XML : si gestisce come se si trattasse del path di un filesystem UNIX, se ad esempio avessimo un file del tipo: </li></ul><ul><li><?xml version = &quot;1.0&quot; encoding = &quot;utf-8&quot; ?> <jamp>     <azienda>         <reparto attributo1 = &quot;.....&quot; attributo2 = &quot;.....&quot; >             <commerciale attributo1 = &quot;.....&quot; attributo2 = &quot;.......&quot; />             <vendite attributo1 = &quot;........&quot; attributo2 = &quot;......&quot; />             <tecnico attributo1 = &quot;.........&quot; attributo2 = &quot;&quot; />         </reparto>     </azienda> </jamp> </li></ul><ul><li>per iniziare la ricerca dal nodo reparto bisognerebbe scrivere base=&quot;/azienda/reparto&quot;. </li></ul><ul><li>LDAP : Specificare il dn </li></ul><ul><li>(esempio dn=&quot;ou=Groups,dc=jamp,dc=it&quot;) </li></ul>
    61. 61. <ul><li>I Datasource: Gerarchici, scope </li></ul><ul><li>Con tale attributo si stabilisce il livello di profondità dell'interrogazione: </li></ul><ul><li>base : la ricerca restituirà solo il nodo selezionato </li></ul><ul><li>onelevel : la ricerca restituirà tutti i nodi relativi al nodo selezionato </li></ul><ul><li>tree : la ricerca restituirà il nodo con tutti i suoi nodi e sottonodi. </li></ul>
    62. 62. <ul><li>I Datasource: Gerarchici, filter </li></ul><ul><li>Utilizzato per filtrare i risultati in base alla tipologia di ds gerarchico l'attributo filter accetta: </li></ul><ul><li>Filesystem : &quot;nofiles&quot;(esclude i files), &quot;nodirectory&quot;(esclude le directory) o un espressione regolare </li></ul><ul><li>File XML : espessione regolare </li></ul><ul><li>LDAP : sintassi completa clicca qui </li></ul>
    63. 63. <ul><li>I Datasource: Gerarchici, justthese </li></ul><ul><li>E' possibile specificare nell'attributo justthese i soli campi che l'interrogazione dovrà restituire. In base alla tipologia di ds gerarchico l'attributo justthese accetta i seguenti valori(usare la , come separatore): </li></ul><ul><li>Filesystem </li></ul><ul><li>dev, ino, mode,nlink, uid, gid, rdev, size, atime, mtime, ctime time of , </li></ul><ul><li>blksize, blocks, md5 </li></ul><ul><li>ftp </li></ul><ul><li>perms, number, owner, group, size, datetime,md5 </li></ul><ul><li>ssh </li></ul><ul><li>perms, number, owner, group, size, datetime,md5 </li></ul><ul><li>File XML: nome degli attributi da restituire </li></ul><ul><li>LDAP: il nome degli attributi della entry(es. dn, uid, cn) </li></ul>
    64. 64. <ul><li>I Datasource: Record </li></ul><ul><li>Il datasource di tipo record è in grado di interfacciarsi a file con campi a lunghezza fissa. </li></ul><ul><li><idtag typeobj = &quot;ds&quot; conn = &quot;dsname&quot; dsname = &quot;filename&quot; > <record> <field1 recname = &quot;campo1&quot; reclength = &quot;lunghezza1&quot; /> <field2 recname = &quot;campo2&quot; reclength = &quot;lunghezza2&quot; /> ......................................... <fieldn recname = &quot;campon&quot; reclength = &quot;lunghezzan&quot; /> </record>         </idtag> </li></ul><ul><li>recname: Nome del campo </li></ul><ul><li>reclength: numero di caratteri </li></ul><ul><li>format(opzionale): formattazione del valore. </li></ul>
    65. 65. <ul><li>I Datasource: CSV </li></ul><ul><li>Il datasource di tipo csv è in grado di interfacciarsi a file di tipo csv(comma-separated-value). </li></ul><ul><li><idtag typeobj = &quot;ds&quot; conn = &quot;dsname&quot; dsname = &quot;filename&quot; > <record> <field1 fieldname = &quot;campo1&quot; fieldseparator = &quot;,&quot; /> <field1 fieldname = &quot;campo1&quot; fieldseparator = &quot;,&quot; /> ......................................... <fieldn fieldname = &quot;campo1&quot; fieldseparator = &quot;,&quot; /> </record>         </idtag> </li></ul><ul><li>fieldname: Nome del campo </li></ul><ul><li>fieldseparator: separatore di campi </li></ul><ul><li>fieldenclose: valore racchiuso da(opzionale esempio &quot;valore&quot;) </li></ul><ul><li>format(opzionale): formattazione del valore. </li></ul>
    66. 66. <ul><li>CUSTOMIZZAZIONI </li></ul>Gli Oggetti Le Lingue
    67. 67. <ul><li>Gli Oggetti </li></ul>OGGETTO PHP JS CSS HTML PDF

    ×