Block : tester visibilité page avec php

Catégories:

Bonjour,

j’ai un bloc que je voudrais n’afficher que sur un type de contenu et selon son sujet, ainsi j’ai mis ce code :

<?php
$page_lycee_ok
= 1;
?>

dans la page et

<?php
echo $page_lycee_ok == 1
?>

dans la zone de gestion du block dans l’admin, mais cela ne marche pas, quelle doit etre la syntaxe ?

merci

#

Il faudrait déjà dire où tu as mis le premier code :-)

Ceci étant dit, et là c’est du PHP, pas trop du Drupal, je ne vois pas bien comment ta variable $page_lycee_ok pourrait être visible plus loin dans le traitement. Au mieux (ou au pire selon les points de vue ;-), il faudrait que tu utilises la directive «global».

Enfin, il me semble que c’est un «return <booléen>» et pas un «echo» qu’il faut utiliser pour la visibilité PHP d’un block.

Sinon une meilleur manière de faire est de partir du principe que si ton block ne s’affiche que pour un type de contenu donné, un contenu de ce type doit être affiché pour qu’il apparaisse. Ce qui signifie par conséquence que l’url courante doit pointer sur un contenu de ce type (ex. mon_type_de_contenu) pour que le bloc s’affiche.

Tu peux donc t’en sortir un peu plus proprement en mettant dans le contrôle de visibilité du bloc un :

<?php
  
if ($node==menu_get_object()) {
      return
$node->type=='mon_type_de_contenu';
   }
   return
false;
?>

Yoran - arNuméral

#

merci yoran,
je m’en suis sortie avec le nom de la page et an cochant «uniquement visible sur page listée»

je garde sous le coude ton code car mon projet est loin d’être fini..

encore merci

Drupal 6.xx - 2 sites chez OVH (pro) mutualisé, 6 chez AlwaysData (Pack10go)
/////////////
www.graphisme-libre.info

#

bien j’expériemente ton et le test via PHP mais j’ai un souci,j’ai mis cela dans la zone de visibilité du bloc :

<?php
  
if ($node==menu_get_object()) {
      return
$node->type=='page_lycee';
   }
   return
false;
?>

mais ca ne marche pas…pourtant j’ai récupéré «Le nom interne de ce type de contenu»…
j’ai raté quoi ?

EDIT : en effet il fallait mettre
return true;
au lieu de
return false;

plus un lien très intéressant : http://drupal.org/node/60317

Drupal 6.xx - 2 sites chez OVH (pro) mutualisé, 6 chez AlwaysData (Pack10go)
/////////////
www.graphisme-libre.info

#

autre question, comment puis je ajouter plusieurs critères distincts ?

ex : une page doit s’afficher sur un certain type de contenu, mais aussi sur les pages d’erreurs, et aussi le contact…

merci

EDIT : j’ai trouvé ce code mais je voudrais lui indiquer 2 sortes de type de contenu au lieu d’une actuellement,comment faire ?

<?php
$match
= FALSE;
$types = array('page_association' => 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;
  }
}

if (substr($_SERVER["REQUEST_URI"], 0, 10) == 'site/search/node/*')
{
$match = TRUE;}

if (substr($_SERVER["REQUEST_URI"], 0) == "contact")
{
$match = TRUE;}

return $match;
?>

Drupal 6.xx - 2 sites chez OVH (pro) mutualisé, 6 chez AlwaysData (Pack10go)
/////////////
www.graphisme-libre.info

Syndiquer le contenu