Créer plusieurs bloques dans un même module

Dans certains cas, nous avons besoin de définir ou créer plusieurs bloques depuis un même module.
 
Pour cela nous allons utiliser le hook hook_block() et surtout la variable $delta qui nous permettra de différencier les bloques entre eux.
 
La documentation de Drupal sur hook_block() est un peu confuse quand il s’agit de a variable $delta. Je cite: “$delta: Which block to return (not applicable if $op is 'list'). Although it is most commonly an integer starting at 0, this is not mandatory. For instance, aggregator.module uses string values for $delta”
 
A vrai dire on ne sait plus très bien si on peut utiliser un entier (integer) ou une chaine alphanumérique (string). Selon ma petite expérience il est bien plus simple d’utiliser une chaine de caractères comme identifiant de nos bloques. Voyez cet exemple tiré de l’API de Drupal.
 
Ci-dessous, je vous montre comment utiliser hook_block pour pouvoir définir plusieurs boques à la fois.

 

<?php
/**
* Implementation of hook_block().
*
* Ce hook définit le nombre de bloques générés para le module
* et le contenu de ces derniers.
*/

function monmodule_block($op = 'list', $delta = '', $edit = array()) {
 
// Le paramètre $op détermine quel type d’information est demandée.
 
switch ($op) {
    case
'list':
   
// Si $op est “list”, on retourne un array
    // de description pour chaque bloque. Cette information
    // sera utile pour l’administrateur mais ne se montre
    // pas à l’utilisateur final
     
$blocks['bloque1'] = array(
       
'info'       => t('Bloque 1'), // le nom du bloque
     
);
   
     
$blocks['bloque2'] = array( // bloque2 deviendra le $delta
       
'info'       => t('Bloque 2'),
       
      );
      return
$blocks;
   
    case
'view':
   
// Si $op est “view”, on génère le contenu pour l’affichage du bloque
    // Le paramètre $delta nous indique quel bloque
    // nous souhaitons afficher. Ce paramètre a été définit
    // dans la section “list”
     
     
switch ($delta) {
       
        case
'bloque1':
         
// The subject is displayed at the top of the block. Note that it
          // should be passed through t() for translation.
         
$block['subject'] = t('Bloque 1');
         
$block['content'] = t('Contenu du Bloque 1');
          break;
       
        case
'bloque2':
         
$block['subject'] = t('Bloque 2');
         
$block['content'] = t('Contenu du Bloque 2');
          break;
      }
    
      return
$block;
  }
}
?>

 
Dans ce cas nous aurons deux bloques avec leur $delta (bloque1 et bloque2). Pour les activer, il faut juste aller sur admin/build/block/list.
 
Si vous voulez approfondir le sujet, je vous recommande cet excellent post d’ Advomatic .
 
A+

Commentaires

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><img>
  • Vous pouvez publier du code en utilisant les balises <code>...</code> (generic) ou bien <?php ... ?> (PHP colorié).
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plus d'informations sur les options de formatage

By submitting this form, you accept the Mollom privacy policy.

Toutes les langues

A propos

En savoir plus... Karim Boudjema. Un développeur belge dans les Andes boliviennes.

Voir mon profil sur LinkedInVoir mon profil sur Twitter

>> En savoir plus...

Commentaires récents