Introduzione (EN): http://drupal.org/node/292
Maggiori info per i moduli (EN): http://drupal.org/node/231276
Drupal è un framework per cms che mette a disposizione il meccanismo degli hook per interagire con core e con altri eventuali moduli.
Il meccanismo è basato sul nome delle funzioni dichiarate all'interno del codice del modulo e il nome del modulo stesso.
Ad esempio hook_menu permette di registrare un path e associargli un comportamento/contenuto da restituire nel brower. Per definire l'interazione del vostro modulo, chiamiamolo moduloprova, si dovrà definire la funzione moduloprova_menu.
Drupal utilizza la funzione module_invoke per eseguire uno specifico hook per uno specifico modulo, cioè ad esempio module_invoke('moduloprova','menu') invocherà moduloprova_menu(). Drupal fa un ciclo sulla lista dei moduli attivi per eseguirli tutti.
L'interazione avviene o tramite un valore o struttura restituito (solitamente un array associativo), o tramite la modifica di parametri passati per riferimento (o entrambe). Per le modalità di interazione e i parametri di con i quali vengono chiamati i vari hook, vedere http://api.drupal.org/ e in particolare http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/7 per la lista di hook disponibili.
Naturalmente è possibile sviluppare un modulo che mette a disposizione l'interazione con esso usando lo stesso meccanismo (module_invoke), ne è un esempio complesso ubercart
Drupal riconosce la presenza di un modulo dalla posizione della cartella che contiene il codice (ad esempio se si trova in /modules o /sites/all/modules) e dall'esistenza di un file [nomemodulo].info che definisce:
esempio, forumcontcheck.info :
name = forumcontcheck
description = Interagisce con forum aggiungendo un controllo sui contenuti
package = Forum Addons
version = "7.x-1.0-alpha4"
core = 7.x
dependencies[] = forum
files[] = forumcontcheck.module
files[] = forumcontcheck.inc.php
alcune informazioni sono opzionali, come dependencies e files (fine normalmente controllata la presenza di un file nomemodulo.module). Il core deve essere specificato: 6.x, 7.x, 8.x, etc.