affichage des blocs

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 me bagarre avec l'affichage de mes blocs. J'vous essplique (et plic et ploc) :

Dans l'ensemble du site, je gère globalement l'affichage avec les moyens normaux de Drupal (le "afficher sur toutes les pages exceptées.." ou "afficher seulement sur les pages...").

Sur UN noeud précis (le 26) ET sur tous-les-noeuds-qui-ont-le-terme 17 ou le terme 18 (remember http://drupalfr.org/forum/support/developpement/24067-condition-php-sur-...), la colonne de droite change : les blocs habituels disparaissent et j'en affiche deux autres à la place.

Premièrement, j'arrive à conditionner l'affichage/non-affichage d'un bloc sur le noeud 26 (facile) mais pas sur les noeuds-qui-ont-le-terme 17 ou 18, j'ai pourtant essayé d'adapter le code de Julien mais nada. De surcroît, je voudrais combiner les deux (sur le noeud et sur lesnoeudsquiontletermetatatitatata).

Deuxièmement, j'ai tenté ma chance avec Context ; je parviens bien à faire apparaitre les 2 blocs en fonction du terme de taxonomie, et à la limite ça pourrait me suffire en les faisant apparaître sur le noeud 26 via l'administration usuelle ("afficher seulement sur les pages listées"). Le problème est que Context ne me permet pas de préciser que les blocs habituels disparaissent. Mes 2 blocs s'affichent donc en dessous des autres.

J'espère avoir été claire ; pouvez-vous me dire si j'ai une solution simple pour m'en sortir ou s'il faut envisager de mettre un vrai développeur sur le coup.

Merci !

Version de Drupal : 
Tags : 

Bonjour,

Merci pour la suggestion, mais ça ne va pas : sections permet de changer de thèmes sur certaines pages, ce n'est pas ce que je veux faire (un affichage différent des blocs, mais dans le même thème).

Merci,

Context fait ça (c'est à lui que je pensais plutot qu'à sections.)

Il suffit de définir un contexte et de faire afficher les blocs que tu désires dedans. Context "over write" la config des blocs sur la page de gestion des blocs.

Serge

Display Suite organise, via ses modules associés, l'affichage d'un peu tout : types de contenus, vues, résultats de recherche, commentaires, profils utilisateurs, etc.
Les blocs existants sont aussi gérés de même, bien sûr, que ceux créés par et pour Display Suite...
Il est possible en particulier de créer des "code fields" (PHP inside) qui se comportent comme des blocs...

Bonjour à tous,

Je ne pense pas que ça soit ce que veut Marie Hélène...

Display suite permet bel et bien de gérer l'affichage d'un tas de chose tel que bloc, vue, commentaire MAIS, si je ne m'abuse, ne permet pas d'organiser l'affichage ou non de ces mêmes blocs, vues ou commentaires sur une page donnée...

Cordialement,

Thib'

C'est sans doute surdimensionné pour le besoin, mais DS permet bien de :

  • afficher ou non un bloc par type de contenu
  • créer des blocs personnalisés qui, avec un peu de code peuvent afficher ce que l'on souhaite, ou un autre bloc, ou rien...

Bon, d'accord, ce n'est sans doute pas LE module idéal juste pour ça... (quand on ♥, on est parfois aveuglé... ;))

Je retente ma chance avec une solution dédiée 100% blocs : Boxes (http://drupal.org/project/boxes)

Je teste Display Suite demain pour vérifier, mais ce que j'avais compris c'est qu'il organise l'affichage des données du node ; si l'affichage du bloc est par type de contenu, ça ne me va pas (ce sont des articles comme les autres sauf qu'ils sont taggés différemment). Je vois ça demain.

Normalement, c'est pil poil ce que permet le champ PHP code dans les blocs.

avec un petit print_r(menu_get_object()) tu vas voir que tu récupères toutes les infos.

Donc il va juste te falloir faire une condition, notamment avec menu_get_object()->nid==26 et sur la taxonomie. Je ne me rappelle juste plus si il te faut un foreach pour vérifier les termes de taxo ou si on les chopes directement (trou de mémoire sur un truc que j'ai déjà fait : je me fais vieux peut-être?)

Il va te falloir coller de petits bouts de code dans DS également cela dit, mais cela me paraît plus simple et plus cohérent de gérer l'ensemble de l'affichage avec ce module plutôt que de passer par différents modules pour les différentes problématiques rencontrées.

Cela dit, en conclusion / épanadiplose : tu es partie de Context et a rencontré des difficultés, pourtant, il s'agit d'une solution adaptée à ton cas d'utilisation et puissante...
Tu devrais donc peut-être y revenir... :)
Au cas où tu ne l'aurais pas déjà vu, voici un lien vers le podcast dédié à Context par l'excellent Rob Feature aka Bob Christensen.

Alors, fin de l'histoire :

  • finalement j'ai créé un type de contenu spécifique plutôt qu'utiliser des articles-taggués-avec-le-terme-17-ou-18.

  • j'ai donc dans mon site une sorte de section composée des contenus de ce type, d'une part, et du noeud 26 (qui est un autre CT) d'autre part.

  • il existe un module pour gérer l'affichage des blocs par type de contenu (http://drupal.org/project/block_node_visibility) ; mais il exclut tout autre condition (or moi, j'ai ce noeud 26).

Donc, j'ai eu recours au snippet PHP proposé par Yann (aka nyl_auster) ici http://drupalfr.org/node/8633, en l'adaptant avec l'aide d'un vrai informaticien (on a toujours besoin d'un petit développeur à portée de main).

Ce qui donne:

  • pour les blocs qui doivent s'afficher :

    <?php
    if(arg(0) == 'node' && is_numeric(arg(1))){  //= si l'url système de la page est de la forme "node/numéro"
     
    $node = node_load(arg(1)); // alors charge les infos du node dont le nid est celui de l'URL
     
    ($node->type == 'grille' || arg(1)==26 ) ? $afficher = TRUE : $afficher = FALSE; // si le type du contenu est 'grille' OU que le nid est 26, alors renvoie TRUE, sinon FALSE
    }
    return
    $afficher;
    ?>
  • et pour les blocs qui doivent disparaître dans cette section :

    <?php
    $afficher
    = TRUE; // par défaut, le bloc s'affiche
    if(arg(0) == 'node' && is_numeric(arg(1))){ // si ces conditions sont réunies ...
     
    $node = node_load(arg(1));
      (
    $node->type == 'grille' || arg(1)==26 || $node->type == 'ressource_doc' ) ? $afficher = FALSE : $afficher = TRUE; // ... les valeurs de $afficher sont inversées
    }
    return
    $afficher;
    ?>

Et voilà ! Merci à tous et particulièrement à Yann pour le snippet et (mon collègue) Jean-Baptiste pour les explications qui m'ont permis de l'adapter.