Hook_block affichage sur les noeuds d'un certain type uniquement

Bonjour,

Je cherche à afficher un block uniquement sur les pages d'un certain type de noeud.
Mais je ne suis pas sûre de la manière dont j'appelle ma fonction dans le tableau ? Est-ce juste ?
Si oui, qu'est ce que j'oublie ? Pour l'instant, le block s'affiche sur toutes les pages du site.

/**
* Implementation of hook_block().
*
* @param $op What kind of information to retrieve about the block. Possible values: list, configure, save, view.
* @param $delta Which block to return.
* @param $edit Data from a configuration form, if submitted.
*/
function straps_display_block($op = 'list', $delta = 0, $edit = array()) {
  switch ($op) {
   case 'list':
        $blocks[0] = array(
        'info' => t('Straps'),
        'status' => TRUE,
        'region' => 'Content Bottom',
        'weight' => '1',
        'visibility' => '2',
        'pages' => only_this_type(),
        'cache'  => BLOCK_NO_CACHE,
      );
      return $blocks;
  case 'view': default:
      switch ($delta) {
        case 0:
          $block['subject'] = t('Straps');
          $block['content'] = _straps_page();
          break;
      }
      return $block;
  }
}

function only_this_type() {
  if (arg(0) == 'node' && is_numeric(arg(1))) {
    $node = node_load(array('nid' => arg(1)));
    return $node->type == 'watch';
  }
}

Merci d'avance pour votre aide

Forum : 
Tags : 
Version de Drupal : 

Merci pour cette réponse. :-)

Le noeud sur lequel je devais mettre le block avait effectivement déjà son template.

En fait, peu de temps après ce post, il fallait que le projet soit rapidemment terminé. Je l'ai résolu comme j'ai pu. Dans le hook block de mon module j'ai mis ce code :

case 'configure':
      $form = array();
      return $form;

Comme cela, j'ai accès aux options de configuration de mon block et j'ai coché le bouton radio sur "code php" et mis le code suivant :

$node = node_load(arg(1));
  if($node->type=="watch"){
  return TRUE;
  }else{
  return FALSE;
  }

Cela résolvait le problème sur le moment, mais j'aimerais quand même savoir pourquoi la même chose ne fonctionnait pas en passant par le module? Sinon lors de l'ajout de mon module cela ne sera pas fait directement.

Encore merci pour ta réaction à ce post en tout cas !

hélas autant que je sache drupal 6 ne permet pas de dire ) un bloc de s'afficher uniquement sur un type de contenu donné à moins de mettre un peu de php dans la visibilité.

Une autre solution c'est d'utiliser le module "contexte" qui permet de placer des blocs selon le type de contenu et tout un tas d'autres critères.

Il me semble que Drupal 7 à incorporer cette possibilité dans le coeur maintenant. (bloc visible selon type de contenu)

Sinon pour le code php de la visibilité j'écrirai un truc plutôt comme ça :

<?php
if (arg(0) == 'node' && is_numeric(arg(1)) {
 
$node = node_load(arg(1));
  return
$node->type == 'watch' ? TRUE : FALSE;
}
?>

ps : oups, je vois que c'est quasiment le code du premier post de ce sujet.