Soumis par vallou le
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 :
Salut, Tu peux créer un
Permalien Soumis par Marvine le 9 Mars, 2011 - 13:09
Salut,
Tu peux créer un template dans ton thème pour ton type de contenu spécifiquement et appelé le block dans ce template.
Merci pour cette réponse.
Permalien Soumis par vallou le 9 Mars, 2011 - 13:38
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 !
Bonjour, Je me heurte au même
Permalien Soumis par gaya le 30 Mars, 2011 - 17:40
Bonjour,
Je me heurte au même problème, avez vous une solution, j'aimerais éviter d'ajouter le code php dans le block par drupal si possible.
Merci
hélas autant que je sache
Permalien Soumis par nyl auster le 31 Mars, 2011 - 15:36
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)
http://formation.ideia.fr/formation/drupal-la-carte | http://twitter.com/nyl_auster
Sinon pour le code php de la
Permalien Soumis par nyl auster le 31 Mars, 2011 - 15:39
Sinon pour le code php de la visibilité j'écrirai un truc plutôt comme ça :
<?phpif (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.
http://formation.ideia.fr/formation/drupal-la-carte | http://twitter.com/nyl_auster