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