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
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 masterslave
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