[Résolu] Afficher un bloc en fonction du contenu

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Je cherche un moyen simple d'afficher un bloc en fonction du type de contenu.
J'utilise pour le moment le paramètre de visibilité par défaut (en listant les pages une à une).
Le problème c'est qu'à terme ce bloc devra s'afficher pour une centaine de pages, ce qui est plutôt lourd à mettre en place.

Merci de votre aide.

Version de Drupal : 

Tu peux gérer la visibilité avec ce code php:

<?php
$match
= FALSE;
$types = array('blog' => 1);
if (
arg(0) == 'node' && is_numeric(arg(1))) {
 
$nid = arg(1);
 
$node = node_load(array('nid' => $nid));
 
$type = $node->type;
  if (isset(
$types[$type])) {
   
$match = TRUE;
  }
}
$url = request_uri();
if (
strpos($url, "blog")) {
 
$match = TRUE;
}
return
$match;
?>

Tu peux aussi utiliser autopath et rajouter le type de node dans l'url (ex: www.exemple/blog/titredunode/nid )

les différente approche pour gérer la visibilité: http://drupal.org/node/64135 (EN)

Comme ça (attention j'ai pas testé):

<?php
$match
= FALSE;
$types = array('blog' => 1);
if (
arg(0) == 'node' && is_numeric(arg(1))) {
 
$nid = arg(1);
 
$node = node_load(array('nid' => $nid));
 
$type = $node->type;
  if (isset(
$types[$type])){
   
$match = TRUE;
  }
}
$url = request_uri();
if (
strpos($url, "blog") || $url == '/index.php?q=/node/23') {
 
$match = TRUE;
}
return
$match;
?>

Et je pense qu'il y aurra des problèmes si on passe en clean url, l'url devenant simplement /node/23.
Quelqu'un a peut être une meilleure solution.

Merci du tuyau. J'ai installé Context pour voir. Ce module a l'air très bien mais n'est pas sa facile à comprendre à l'usage. Comment tu fais pour afficher un bloc en fonction du contenu avec Context ?

Dans la configuration du bloc la section "Afficher le bloc sur certaines pages seulement" il y a l'option "Afficher si le code PHP suivant retourne TRUE (mode PHP, experts seulement).". Il faut copier le code ici.

Merci pour cette astuce, mais j'aurais une question complémentaire...

Comment faire pour que le bloc en question s'affiche sur les pages de contenu concernées ET sur les pages livre qui l'encadre ?
Exemple la taxonomy s'affiche sur chaque fiche recette ET sur les page livre déterminant les rubriques 'entrées, desserts" etc
je pourrais faire les distinctions de rubrique par une autre taxonomie mais je préférerai rester sous forme de livre car j'ai plusieurs élèments dissemblables dans le même site...
Un livre recette, un ivre photo, un livre généalogie etc...

Merci

Alors essayons d'être claire ;)
Dans le site que j'essaie de mettre en palce il y a 3 sections quej 'ai articulées autour de "pagesbook", une section photo, une section histoire, une section cuisine.
Je prends l'exemple du groupe cuisine.
J'ai créé des "page book" intitulées Livre de recette (préface),Entrées(page enfant), Desserts(page enfant) etc qui constituent l'architecture d'un livre de recettes.
J'ai saisi les recettes sur des fiche-contenu appelées "recette" que j'ai crées avec CCK qui sont définies comme page enfant de la page du type de recette concernée.
Cela me permet de mettre un petit laïus sur la "pagebook" du type de recette et de regrouper, dessous, en liens toutes les recettes (de dessert par exemple).
Pour mes fiches recettes j'ai une taxonomie appelée "ingrédients" que j'affiche avec tagadeclic.
Je souhaitais donc que ces tags ne soient affichés que lorsqu'on est sur une des pages du livre de recette et non sur une des pages photo par exemple qui ont elle-même leur propre groupe de taxonomie, ainsi que les histoires.
Avec le php donné plus haut ça fonctionne parfaitement pour le contenu "recette" mais bien entendu mes diverses pages "pagebook" ne sont pas prises en compte car pas définies, ce qui est logique.
J'aimerai savoir s'il est possible de faire en sorte que le code php prenne en compte ces pagebook et comment, car on l'aura deviné,je suis une bille absolue en PHP.
Et ça pour chaque partie du site ;) Mais s'il n'y a plus qu'à changer les termes ça je saurais faire :)

Si ce n'est pas possible je me débrouillerai autrement mais ça voudra dire passer du temps à modifier la structure des trucs.

Merci pour l'aide

Hello,

Perso, je vois trop comment faire ça, mais évidement ça doit être possible.

J'utilise très rarement "pagebook" mais plutôt des type avec des field_node_reference ensuite j'utilise view pour rassembler les nodes.

Bonne chance

Salut à tous,

en forme de résumé nous avons : 1 livre de recettes dont le type de contenu (node)a :
1 titre (le titre de la recette)
1 (ou +) corps décrivant la recette elle-même : (les ingrédients, la préparation, le temps de cuisson...)
1 catégorisation de type : Entrée, plat principal, dessert...
1 catégorisation nutritionnelle : Plat calorique, diététique...
1 catégorisation régionale : Plat traditionnel, breton, corse, de pays...
1 catégorisation de coût : Cher, bon marché...
1 catégorisation gustative : Délicieux, ordinaire...
Etc...

Avec le module " views", des" vues " de type bloc sur une (ou +) catégorie et une visibilité conditionnelle desdits blocs dans les paramètres "affichage" des blocs spécifiquement sur certaines pages, pourrait être une solution. ???