SlideShare a Scribd company logo
1 of 17
Download to read offline
Drupal come framework 
          di sviluppo
    Dario Ghilardi                        Marco Vito Moscaritolo
       darioghilardi@gmail.com               marco@mavimo.org
       http://www.darioghilardi.com          http://mavimo.org




                                       
Drupal come framework di sviluppo
            ....coding with Drupal




               Il processo di sviluppo
        ●   Gli hook
        ●   Le Form e le FAPI 2
        ●   L'interazione con il DB
        ●   Il processo di testing

                                      
Drupal come framework di sviluppo
           ....coding with Drupal

                                             Gli hook

Gli hook sono delle funzioni di callback scatenate in 
 automatico dal sistema all'accadere di certi eventi.

Il nome dell'hook viene usato per determinare quale 
              evento deve intercettare.

 Concettualmente possiamo vedere i moduli come 
  classi che ereditano da una classe virtuale ed 
implementano alcuni dei metodi che questa espone, 
           questi metodi sono gli hook.
                                     
Drupal come framework di sviluppo
          ....coding with Drupal

                                          Gli hook


Gli hook sono composti dal nome del modulo seguito 
            dal nome dell'hook, quindi:

         miomodulo_user(...)
         miomodulo_nodeapi(...)
         miomodulo_load(...)
         miomodulo_taxonomy(...)
         miomodulo_schema(...)
         miomodulo_form_alter(...)

                                    
Drupal come framework di sviluppo
              ....coding with Drupal

                                                           Gli hook


/**
  * Implementation of hook_user().
  */
function galleryfapi_user($op, &$edit, &$account, $category = NULL) {
   switch ($op) {
     case 'login':
       # code...
       drupal_set_message(t(quot;Benvenutoquot;), 'status');
       break;
     case 'logout':
       # code...
       drupal_set_message(t(quot;Arrivederciquot;), 'status');
       break;
   }
}



                                        
Drupal come framework di sviluppo
           ....coding with Drupal

                                           I Form e le FAPI2




Il form viene strutturato come array e non richiede la 
           definizione del codice di markup.

Viene gestito dal sistema che ne controlla l'integrità 
          dei dati e ne gestisce il flusso.

Tramite hook_form_alter (o altri) è possibile andare a 
modificare i form generati da altre parti del sistema.


                                     
Drupal come framework di sviluppo
         ....coding with Drupal

                                         I Form e le FAPI2


  Le Form API 2 sono gli elementi strutturali che 
compongono l'array del form; ne esistono alcune di 
                  default, quali:
                   ● select

                   ● textfield

                   ● checkbox

                   ● ...


ed è possibile crearne ad hoc in base alle proprio 
             esigenze implmentative.

                                   
Drupal come framework di sviluppo
           ....coding with Drupal

                                                 I Form e le FAPI2
/**
  * Implementation of hook_form_alter().
  */
function miomodulo_form_alter(&$form, $form_state, $form_id) {
   // Add node-form info here
   $form['name'] = array(
     '#type'           => 'select',
     '#title'          => t('Title'),
     '#description'    => t('Description'),
     '#required'       => TRUE,
     '#options'        => array(
          'value1' => t('Description 1'),
          'value2' => t('Description 2'),
          'value3' => t('Description 3'),
       ),
   );
}
                                     
Drupal come framework di sviluppo
              ....coding with Drupal

                                                     I Form e le FAPI2




      Esempio di validazione di un campo testo di un 
            form generato precedentemente
    /**
      * Implementation of hook_validate().
      */
    function miomodulo_validate(&$form, $form_elements) {
       if($form_elements['age'] < 18) {
         form_set_error('age', t('Devi essere maggiorenne.'));
       }
    }




                                        
Drupal come framework di sviluppo
            ....coding with Drupal

                                              Il database

Drupal si interfaccia con diversi database, anche se il 
            principale risulta essere MySQL

 Nella versione precedente (la 5) tutte le operazioni 
venivano svolte con chiamate dirette al DB, mentre 
con la versione attuale esiste un livello di astrazione 
        intermedio su cui agire (il DB Layer).

     La versione 7 amplierà le funzionalità del DBL 
         gestendo configurazioni master­slave 
                                      
Drupal come framework di sviluppo
            ....coding with Drupal

                                                Il database

      Il DBL si interfaccia al database ed in base 
       all'hook_schema ne definisce la struttura.

     Inoltre, tramite apposite funzioni, si occupa di 
       generare le corrette chiamate di scrittura 
                  (insert/update) sul DB.

     Le operazioni di lettura vengono demandate a 
    moduli stessi per permettere agli sviluppatori di 
          ottimizzare le query che generano.
                                      
Drupal come framework di sviluppo
           ....coding with Drupal

                                                   Il database




Operazione di update di un campo all'interno di una 
       tabella usando le funzioni del DBL:
       $data = new stdClass();
       $data->id   = 25;
       $data->txt = 'bla bla bla';
       $data->bool = FALSE;
       drupal_write_record('tabella', $data, array('id'));




                                     
Drupal come framework di sviluppo
          ....coding with Drupal

                                                 Il database



      Esempio di un estrazione di dati dal DB:
        $results = db_query(quot;SELECT *
                             FROM {tabella}
                             WHERE id < %dquot;,
                             $id_limit);

        while ($row = db_fetch_object($results)) {
          $output .= $row->id;
          $output .= $row->txt;
          $output .= $row->bool;
        }



                                    
Drupal come framework di sviluppo
            ....coding with Drupal

                                               Il database

  Il sistema di interazione con il DB mette già in atto 
 alcune funzionalità per la sicurezza; per fare questo, 
però, bisogna rispettare i cosiddetti coding standard:

       Uso dei placeholder nelle query, in questo 
      ●


       modo il sistema sanitizza i parametri della 
       query evitando SQL injection

       check_plain e filter_xss per ripulire l'input 
      ●


       e l'utput dei datiXSS.
                                      
Drupal come framework di sviluppo
            ....coding with Drupal

                                                 testing




Drupal utilizza unit testing per l'analisi dei meccanismi 
 di funzionamento dei diversi moduli. Questo si basa 
        sulla libreria Open Source simpletest.

Oltre a questo esistono i moduli coder e schema che 
analizzano l'aderenza del codice ai coding standard (il 
        primo) e l'integrità del DB (il secondo). 


                                      
Drupal come framework di sviluppo
           ....coding with Drupal

                                             Conclusioni



   Questo strumento si sta evolvendo sempre più 
 seguendo due direzioni parallele, la prima orientata 
   verso il CMS e la seconda verso il framework.

   Questo consente di sfruttarne le potenzialità in 
entrambe le situazioni ottimizzando quindi i tempi di 
 realizzazione dei progetti basati su di esso sia per 
      sviluppatori che per gli amministratori.

                                     
Drupal come framework di sviluppo
          ....coding with Drupal




                   Domande?
            Per altre informazioni visitate

http://drupal.org           e      http://www.drupalitalia.org


                                    

More Related Content

Similar to Drupal come framework di sviluppo

Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...DrupalDay
 
Drupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzioneDrupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzionesparkfabrik
 
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 drupal8Luca Lusso
 
DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8DrupalDay
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Railsjekil
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Wellnet srl
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Eugenio Minardi
 
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletSviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletLuca Bartoli
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Drupal 7 : theming avanzato
Drupal 7 : theming avanzatoDrupal 7 : theming avanzato
Drupal 7 : theming avanzatoTwinbit
 
Drupal 4 stakeholder
Drupal 4 stakeholderDrupal 4 stakeholder
Drupal 4 stakeholderbmeme
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriGrUSP
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriAlessandro Nadalin
 
Case study: un approccio modulare in un progetto legacy
Case study: un approccio modulare in un progetto legacyCase study: un approccio modulare in un progetto legacy
Case study: un approccio modulare in un progetto legacyMariano Fiorentino
 
[drupalday2017] - Drupal 4 Stakeholders
[drupalday2017] - Drupal 4 Stakeholders[drupalday2017] - Drupal 4 Stakeholders
[drupalday2017] - Drupal 4 StakeholdersDrupalDay
 
Training Signal Webtrends
Training Signal WebtrendsTraining Signal Webtrends
Training Signal WebtrendsStefano Iaboni
 
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Matteo Enna
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerMatteo Magni
 

Similar to Drupal come framework di sviluppo (20)

Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
 
Drupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzioneDrupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzione
 
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
 
DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Perl Template Toolkit
Perl Template ToolkitPerl Template Toolkit
Perl Template Toolkit
 
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletSviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Drupal 7 : theming avanzato
Drupal 7 : theming avanzatoDrupal 7 : theming avanzato
Drupal 7 : theming avanzato
 
Drupal 4 stakeholder
Drupal 4 stakeholderDrupal 4 stakeholder
Drupal 4 stakeholder
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
 
Case study: un approccio modulare in un progetto legacy
Case study: un approccio modulare in un progetto legacyCase study: un approccio modulare in un progetto legacy
Case study: un approccio modulare in un progetto legacy
 
[drupalday2017] - Drupal 4 Stakeholders
[drupalday2017] - Drupal 4 Stakeholders[drupalday2017] - Drupal 4 Stakeholders
[drupalday2017] - Drupal 4 Stakeholders
 
Training Signal Webtrends
Training Signal WebtrendsTraining Signal Webtrends
Training Signal Webtrends
 
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesigner
 
Seo con drupal
Seo con drupalSeo con drupal
Seo con drupal
 

More from GrUSP

PayPal e PHP
PayPal e PHPPayPal e PHP
PayPal e PHPGrUSP
 
Zend Server
Zend ServerZend Server
Zend ServerGrUSP
 
Zend Dojo
Zend DojoZend Dojo
Zend DojoGrUSP
 
PHP & IBM i
PHP & IBM iPHP & IBM i
PHP & IBM iGrUSP
 
Programmazione Ad Eventi In Php
Programmazione Ad Eventi In PhpProgrammazione Ad Eventi In Php
Programmazione Ad Eventi In PhpGrUSP
 
Symfony 2.0
Symfony 2.0Symfony 2.0
Symfony 2.0GrUSP
 
Memi Beltrame Collaborative Design
Memi Beltrame Collaborative DesignMemi Beltrame Collaborative Design
Memi Beltrame Collaborative DesignGrUSP
 
Mocking Objects Practices
Mocking Objects PracticesMocking Objects Practices
Mocking Objects PracticesGrUSP
 

More from GrUSP (8)

PayPal e PHP
PayPal e PHPPayPal e PHP
PayPal e PHP
 
Zend Server
Zend ServerZend Server
Zend Server
 
Zend Dojo
Zend DojoZend Dojo
Zend Dojo
 
PHP & IBM i
PHP & IBM iPHP & IBM i
PHP & IBM i
 
Programmazione Ad Eventi In Php
Programmazione Ad Eventi In PhpProgrammazione Ad Eventi In Php
Programmazione Ad Eventi In Php
 
Symfony 2.0
Symfony 2.0Symfony 2.0
Symfony 2.0
 
Memi Beltrame Collaborative Design
Memi Beltrame Collaborative DesignMemi Beltrame Collaborative Design
Memi Beltrame Collaborative Design
 
Mocking Objects Practices
Mocking Objects PracticesMocking Objects Practices
Mocking Objects Practices
 

Drupal come framework di sviluppo

  • 1. Drupal come framework  di sviluppo Dario Ghilardi Marco Vito Moscaritolo darioghilardi@gmail.com marco@mavimo.org http://www.darioghilardi.com http://mavimo.org    
  • 2. Drupal come framework di sviluppo ....coding with Drupal Il processo di sviluppo ● Gli hook ● Le Form e le FAPI 2 ● L'interazione con il DB ● Il processo di testing    
  • 3. Drupal come framework di sviluppo ....coding with Drupal Gli hook Gli hook sono delle funzioni di callback scatenate in  automatico dal sistema all'accadere di certi eventi. Il nome dell'hook viene usato per determinare quale  evento deve intercettare. Concettualmente possiamo vedere i moduli come  classi che ereditano da una classe virtuale ed  implementano alcuni dei metodi che questa espone,  questi metodi sono gli hook.    
  • 4. Drupal come framework di sviluppo ....coding with Drupal Gli hook Gli hook sono composti dal nome del modulo seguito  dal nome dell'hook, quindi: miomodulo_user(...) miomodulo_nodeapi(...) miomodulo_load(...) miomodulo_taxonomy(...) miomodulo_schema(...) miomodulo_form_alter(...)    
  • 5. Drupal come framework di sviluppo ....coding with Drupal Gli hook /** * Implementation of hook_user(). */ function galleryfapi_user($op, &$edit, &$account, $category = NULL) { switch ($op) { case 'login': # code... drupal_set_message(t(quot;Benvenutoquot;), 'status'); break; case 'logout': # code... drupal_set_message(t(quot;Arrivederciquot;), 'status'); break; } }    
  • 6. Drupal come framework di sviluppo ....coding with Drupal I Form e le FAPI2 Il form viene strutturato come array e non richiede la  definizione del codice di markup. Viene gestito dal sistema che ne controlla l'integrità  dei dati e ne gestisce il flusso. Tramite hook_form_alter (o altri) è possibile andare a  modificare i form generati da altre parti del sistema.    
  • 7. Drupal come framework di sviluppo ....coding with Drupal I Form e le FAPI2 Le Form API 2 sono gli elementi strutturali che  compongono l'array del form; ne esistono alcune di  default, quali: ● select ● textfield ● checkbox ● ... ed è possibile crearne ad hoc in base alle proprio  esigenze implmentative.    
  • 8. Drupal come framework di sviluppo ....coding with Drupal I Form e le FAPI2 /** * Implementation of hook_form_alter(). */ function miomodulo_form_alter(&$form, $form_state, $form_id) { // Add node-form info here $form['name'] = array( '#type' => 'select', '#title' => t('Title'), '#description' => t('Description'), '#required' => TRUE, '#options' => array( 'value1' => t('Description 1'), 'value2' => t('Description 2'), 'value3' => t('Description 3'), ), ); }    
  • 9. Drupal come framework di sviluppo ....coding with Drupal I Form e le FAPI2 Esempio di validazione di un campo testo di un  form generato precedentemente /** * Implementation of hook_validate(). */ function miomodulo_validate(&$form, $form_elements) { if($form_elements['age'] < 18) { form_set_error('age', t('Devi essere maggiorenne.')); } }    
  • 10. Drupal come framework di sviluppo ....coding with Drupal Il database Drupal si interfaccia con diversi database, anche se il  principale risulta essere MySQL Nella versione precedente (la 5) tutte le operazioni  venivano svolte con chiamate dirette al DB, mentre  con la versione attuale esiste un livello di astrazione  intermedio su cui agire (il DB Layer). La versione 7 amplierà le funzionalità del DBL  gestendo configurazioni master­slave     
  • 11. Drupal come framework di sviluppo ....coding with Drupal Il database Il DBL si interfaccia al database ed in base  all'hook_schema ne definisce la struttura. Inoltre, tramite apposite funzioni, si occupa di  generare le corrette chiamate di scrittura  (insert/update) sul DB.  Le operazioni di lettura vengono demandate a  moduli stessi per permettere agli sviluppatori di  ottimizzare le query che generano.    
  • 12. Drupal come framework di sviluppo ....coding with Drupal Il database Operazione di update di un campo all'interno di una  tabella usando le funzioni del DBL: $data = new stdClass(); $data->id = 25; $data->txt = 'bla bla bla'; $data->bool = FALSE; drupal_write_record('tabella', $data, array('id'));    
  • 13. Drupal come framework di sviluppo ....coding with Drupal Il database Esempio di un estrazione di dati dal DB: $results = db_query(quot;SELECT * FROM {tabella} WHERE id < %dquot;, $id_limit); while ($row = db_fetch_object($results)) { $output .= $row->id; $output .= $row->txt; $output .= $row->bool; }    
  • 14. Drupal come framework di sviluppo ....coding with Drupal Il database Il sistema di interazione con il DB mette già in atto  alcune funzionalità per la sicurezza; per fare questo,  però, bisogna rispettare i cosiddetti coding standard:  Uso dei placeholder nelle query, in questo  ● modo il sistema sanitizza i parametri della  query evitando SQL injection  check_plain e filter_xss per ripulire l'input  ● e l'utput dei datiXSS.    
  • 15. Drupal come framework di sviluppo ....coding with Drupal testing Drupal utilizza unit testing per l'analisi dei meccanismi  di funzionamento dei diversi moduli. Questo si basa  sulla libreria Open Source simpletest. Oltre a questo esistono i moduli coder e schema che  analizzano l'aderenza del codice ai coding standard (il  primo) e l'integrità del DB (il secondo).     
  • 16. Drupal come framework di sviluppo ....coding with Drupal Conclusioni Questo strumento si sta evolvendo sempre più  seguendo due direzioni parallele, la prima orientata  verso il CMS e la seconda verso il framework. Questo consente di sfruttarne le potenzialità in  entrambe le situazioni ottimizzando quindi i tempi di  realizzazione dei progetti basati su di esso sia per  sviluppatori che per gli amministratori.    
  • 17. Drupal come framework di sviluppo ....coding with Drupal Domande? Per altre informazioni visitate http://drupal.org e http://www.drupalitalia.org