Aujourd'hui Ulhume nous propose sur son "non blog" Artisan Numérique un tutoriel pour créer son premier module pour Drupal.
Le module se contentera d'afficher des statistiques (nombre d'articles, de pages, de commentaires, ...) mais vous l'aurez compris son but premier est l'aspect pédagogique.
Tout d'abord, il faut structurer l'arborescence de l'application pour y loger notre futur module. Pour des soucis de maintenabilité, l'auteur nous conseille de créer le répertoire "mes_modules" dans le répertoire "sites/all/modules" et non directement dans "modules" à la racine. De ce fait, en cas de changement de version de Drupal, l'importation du répertoire "sites" se chargera d'importer aussi nos modules.
Une fois ce dossier "mes_modules" crée, nous allons aussi y ajouter un répertoire "statistiques" dans lequel nous créerons au minimum deux fichiers "statistiques.info" et "statistiques.module". Vous devriez donc vous retrouver avec une arborescence comme ceci :
... etc ...
site
all
modules
...etc...
mes_modules
statistiques
statistiques.info
statistiques.module
...etc...
...etc...
...etc...
Nous avons un répertoire "statistiques" qui sera le nom parent du module, les fichiers contenus dans ce répertoire devrons porter son nom en plus de leur extensions.
Drupal, quand il trouve un répertoire de module, va regarder à l'intérieur s'il trouve un fichier .info du même nom, le fichier de configuration du module. C'est un fichier texte contenant des informations sur le module comme son nom, sa description, la version de Drupal avec lequel il est compatible,... Après avoir trouvé ce fichier .info, Drupal va chercher un fichier .module qui lui contient le code PHP du module.
Libre à vous bien-sûr d'appeler d'autres fichiers depuis votre .module.
Voici les fichiers .info et .module de notre module de statistiques :
* statistiques.info
name = "Statistiques"
description = "Statistiques sur les contenus"
package = karma-lab
project = "statistiques"
version = "6.x-2.0"
core = 6.x
* statistiques.module
function statistiques_init() {
}
/**
* Implémentation du hook_block
*
* @param $op opération demandée (list, configure, save, view)
* @param $delta id du bloc (op==view)
* @param $edit données modifiées par le formulaire (op==save)
*/
function statistiques_block($op = 'list', $delta = 0, $edit = array()) {
$blocks=array();
// Enumeration des blocs disponibles
if ($op == 'list') {
$blocks[] = array(
'info' => t('Affichage des statistiques'),
'weight' => 0,
'status' => 1);
return $blocks;
}
// Génération du formulaire de configuration
else if ($op == 'configure' & $delta == 0) {
$form['statistiques_commentaires'] = array(
'#type' => 'checkbox',
'#title' => t('Afficher les commentaires ?'),
'#default_value' => variable_get('statistiques_commentaires', 0),
);
return $form;
}
// Sauvegarde du formulaire de configuration
else if ($op == 'save' & $delta == 0) {
variable_set('statistiques_commentaires', $edit['statistiques_commentaires']);
}
// Génération du contenu à afficher pour le block
else if ($op == 'view') {
switch($delta) {
case 0:
$block = array(
'subject' => t('Statistiques'),
'content' => statistiques_contenu());
break;
}
return $block;
}
}
function statistiques_contenu() {
$result="<ul>";
$cursor = db_query("SELECT type,count(type) as count FROM {node} GROUP BY type");
while ($statistique=db_fetch_object($cursor)) {
$result.="<li>".t($statistique->type).' : '.$statistique->count."";
}
if (variable_get('statistiques_commentaires', 0)) {
$comments = db_result(db_query("SELECT count(*) as count FROM {comments}"));
$result.="<li>".t("commentaires").' : '.$comments."";
}
$result.="</ul>";
return $result;
}
?>
Bien entendu vous trouverez bien plus d'explication sur ce premier module chez son auteur, d'ailleurs durant la rédaction de cette actualité Ulhume a mis en ligne la suite de ce tutoriel : créer un module "type de contenu".
Merci encore à lui pour ces contributions.
Proposé par Hourdeaux Christophe