Drupal come framework di sviluppo

17

Click here to load reader

description

Drupal può essere considerato un CMS che permette una rapida creazione di portali con funzionalità abbastanza standard, ma può anche essere considerato uno strumento usato per la creazione ditrumento usato per la creazione di siti usando le potenzialità di framework che lo strumento presenta.In questo intervento verranno presentate le API del sistema che permettono una ampia espandibilità e velocità di scrittura di codice. Inoltre verrà descritta l’anatomia di un modulo presentandone la struttura e come questo interagisca con il sistema di base.L’intervento chiuderà con una carrellata di vantaggi e svantaggi dell’uso di Drupal mettendone in evidenza la differenza dai classici framework

Transcript of Drupal come framework di sviluppo

Page 1: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

Dario [email protected]://www.darioghilardi.com

Marco Vito [email protected]://mavimo.org

Page 2: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

Il processo di sviluppo● Gli hook

● Le Form e le FAPI 2

● L'interazione con il DB

● Il processo di testing

....coding with Drupal

Page 3: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

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.

Gli hook

....coding with Drupal

Page 4: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

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(...)

Gli hook

....coding with Drupal

Page 5: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

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

Gli hook

....coding with Drupal

Page 6: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

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.

I Form e le FAPI2

....coding with Drupal

Page 7: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

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.

I Form e le FAPI2

....coding with Drupal

Page 8: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

/** * 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'), ), );}

I Form e le FAPI2

....coding with Drupal

Page 9: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

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.')); }}

I Form e le FAPI2

....coding with Drupal

Page 10: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

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 

Il database

....coding with Drupal

Page 11: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

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.

Il database

....coding with Drupal

Page 12: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

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'));

Il database

....coding with Drupal

Page 13: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

Esempio di un estrazione di dati dal DB:

$results = db_query("SELECT * FROM {tabella} WHERE id < %d", $id_limit);

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

Il database

....coding with Drupal

Page 14: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

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.

Il database

....coding with Drupal

Page 15: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

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). 

testing

....coding with Drupal

Page 16: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

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.

Conclusioni

....coding with Drupal

Page 17: Drupal come framework di sviluppo

   

Drupal come framework di sviluppo

Domande?Per altre informazioni visitate

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

....coding with Drupal