Je vous propose de créer un module Drupal qui aura pour fonction d’afficher le nombre de nodes (tout coutenu publié).

Cet petit module nous permettra de comprendre l’architecture d’un module codé en PHP, le fonctionnement des hooks, la création d’un bloc affichable dans les différentes régions d’un thème, et l’utilisation de SQL sur Drupal.

1 – Création des fichiers du module

Capture

Capture

Il faut commencer par créer deux fichiers dans un dossier qui porte le nom de notre module « nombrenodes ». Ces deux fichiers doivent obligatoirement porter le même nom que notre module avec les extensions .info et .module.

  • nombrenodes.info
  • nombrenodes.module

2 – Développement du fichier PHP « nombrenodes.info »

Nous devons organiser le contenu de ce fichier de la façon suivante. Ces informations seront interprétées par Drupal en back-office.

; $id;
name = Nombre de Nodes
description = Un module pour afficher le nombre de nodes de mon site Drupal.
core = 7.x
version = 7.x-0.x-dev
package = Modules Alekos
files[] = nombrenodes.module

La page de gestion des modules interprète ces informations. Notez qu’il est impératif de renseigner chaque fichier d’un module avec la mention « files[] = ». Sachez aussi que le fichier .module est là pour l’exemple. En réalité ce dernier est géré par Drupal, donc sa présence dans le .info est tout à fait inutile.

Capture

3 – Développement du fichier PHP « nombrenodes.module »

a) Les commentaires, une obligation conventionnelle pour valider un module Drupal.

Avant toute chose, je dois respecter les standards de la communauté Drupal, c’est ainsi que commencera le code mon module :

<?php
/**
 * @file
 * Afficher le nombre de nodes
 */

Notez que l’on ouvre la balise PHP sans la fermer, c’est une spécificité Drupal qui change du développement PHP classique.

b) Le hook hook_block_info() pour développer le back-office de mon bloc.

Vous pouvez apprécier la forme conventionnelle de l’utilisation d’un hook. Comme tous les hooks de Drupal, le nom du module présent dans les fichiers et le dossier remplace le mot « hook ». « Hook_block_info() » sera utilisable une fois renommé en « nombrenodes_block_info() ».

Ce hook permet de générer les informations du bloc en back-office, sur la page de gestion des régions/blocs.

/**
 * Implementation of hook_block_info()
 */
 function nombrenodes_block_info() {
 $block['nombrenodes'] = array(
 'info' => t('Afficher le nombre de nodes'),
 );
 return $block;
 }

c) Le hook hook_help() pour générer une page d’aide concernant le module.

Capture

Nous souhaitons que le module propose un lien d’aide pour qu’il soit mieux compris par l’utilisateur. Procédons à l’implémentation du hook :

/**
 * Implementation of hook_help()
 */
 
function nombrenodes_help($path, $arg) {
 switch ($path) {
 case 'admin/help#nombrenodes':
 return t('<p>Ce module de la société alekos permet d\'afficher le nombre de nodes</p>');
 }
}

Nous obtenons ainsi à l’aide d’un switch PHP une url et une page donnant des informations sur notre module, dont les fonctionnalités restent modestes.

d) Le hook hook_block_view pour afficher le bloc aux internautes

Ce hook va nous permettre de créer véritablement notre module en préparant son affichage par la création d’un tableau associatif.

Commençons par les bonnes pratiques Drupal :

/**
 * Implementation of hook_block_view()
 */

Nous préparons le hook en renseignant la clé $delta qui sert à préciser quel bloc est concerné lorsque l’on souhaite en coder plusieurs.

function nombrenodes_block_view($delta = 'nombrenodes') {

Nous procédons à la requête SQL pour compter les nodes. La table « node » est mise en accolades au cas où des préfixes lui seraient ajoutés à l’installation.

$query = 'SELECT COUNT(*) FROM {node}';

Pour procéder à la requête, nous utilisons la fonction db_query(). Il faudra ensuite procéder à un fetch en PHP adapté à Drupal : fetchField().

$resultat = db_query($query);
 $nodes = $resultat->fetchField();

Nous pouvons alors créer notre bloc $block sous forme de tableau associatif. Pourquoi ? Parce que l’API Drupal nous a renseigné sur le hook.

La bonne pratique consiste à taper le hook à utiliser dans la recherche à droite pour apprendre son fonctionnement précis.

Ce tableau associatif est composé d’un titre « subject », et d’un contenu « content ».

Pour automatiser la traduction Drupal, je place mon texte dans t( »),

 $block = array(
 'subject' => t('<h3>Nombre de nodes</h3>'),
 'content' => t('Il y a ') . $nodes . ' nodes.'
 );
 return $block;
 }

Voici comment se présente l’implémentation de hook_block_views :

/**
 * Implementation of hook_block_view()
 */
 function nombrenodes_block_view($delta = 'nombrenodes') {
 $query = 'SELECT COUNT(*) FROM {node}';
 $resultat = db_query($query);
 $nodes = $resultat->fetchField();
 $block = array(
 'subject' => t('<h3>Nombre de nodes</h3>'),
'content' => t('Il y a ') . $nodes . ' nodes.'
 );
 return $block;
 }

 4 – Activation du module

Après l’activation du module, nous retrouvons notre bloc sur la page de gestion des régions.

Capture

Après avoir placé le bloc sur la barre latérale, nous obtenons le résultat souhaité : notre module nous informe sur le nombre de nodes en base de données.

 

alekos

 

Tags: , , , ,