Limiter la visibilité d'un bloc à un type de contenu particulier

Onglets principaux

La documentation Drupal 6 n'est plus maintenue et en cours de dépublication.

On a parfois besoin dans Drupal de limiter la visibilité d'un bloc à un type de contenu particulier. Or, il n'est pas possible de faire cela en se basant sur les chemins internes dans les paramètres de configuration du bloc. Il reste donc deux solutions :

Utiliser du php pour gérer la visibilité :

Entrez le code ci-dessous dans les paramètres de visibilité (choisissez bien PHP pour le type de visibilité) et remplacez "story" par le type de contenu sur lequel vous souhaitez que votre bloc s'affiche

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

Utiliser le module context :

Le module context permet de définir comme son nom l'indique des "contextes" sur votre site. En l'occurence il est facile de créer un mini-contexte du style "sur tel type de contenu, je veux afficher ce bloc". Attention ! pour que contexte puisse placer les blocs lui même, ceux ci ne doivent pas être déjà placés par la page de gestion de blocs classiques de Drupal. Attention également si vous avez installé i18n : context s'entend très mal avec lui. Une partie des problèmes peut se résoudre en augmentant le poids du module context dans la table system mais la cohabitation reste difficile.

http://drupal.org/project/context

Malgré ces remarques, l'intérêt de context ne se limite pas à placer un bloc selon un type de contenu, il peut déclencher différentes réactions en fonction de différents éléments, un module à tester donc et qui fait un joli compagnon pour features.

Le fait de pouvoir voir tous les blocs présents dans un contexte particulier est également un plus pour l'utilisation de context. En effet, la page des blocs de drupal ne permet pas de par exemple réunir tous les blocs présent sur telle ou telle page, ou tous ceux présents sur tel ou tel type de contenu.

Version de Drupal : 

Commentaires

merci Nyl
Docs de référence sur drupal.org :
PHP block visibility settings
http://drupal.org/node/60317

robin
http://gazwal.com - Expertise Drupal & Intégration Web / Freelance
http://biboo.net - Tutoriels vidéos Drupal
http://twitter.com/gazwal

robin
http://gazwal.com - Expertise Drupal & Intégration Web / Freelance
http://biboo.net - Tutoriels vidéos Drupal
http://twitter.com/gazwal

Or, il n'est pas possible de faire cela en se basant sur les chemins internes dans les paramètres de configuration du bloc.

Si : si dans Pathauto on a configuré l'alias pour ce type de contenu en incluant le nom machine du type de contenu racine/type/noeud. Il suffit de ne faire afficher le bloc que sur les pages type et type/*. C'est rudimentaire, mais pourquoi passer par un code PHP ou un autre module si cette solution suffit ?

Ah oui très bonne astuce ça.

"mais pourquoi passer par un code PHP ou un autre module si cette solution suffit ?"

1) parce que je n'y avais pas pensé :-)
2) Parce que l'alias peut changer si on change les réglages de path_auto alors que le nid est permanent. Du coup je préfère prend l'information à la source, mais ça n'engage que moi.
2) parce que context offrent d'autres avantages que celui-ci, notamment de pouvoir multiplier les conditions (sur tel type de contenu + selon le role de l'utilisateur + sur tel type de vue).

4) C'est exact, les infos du noeud sont permanentes, donc ton code PHP sera plus pérenne.
10) Les débutants ne démarreront peut-être pas par Context.
7) D'ailleurs il va falloir que je regarde ce module de plus près.
25) Où as-tu appris à compter ;-D ?