Voilà, voilà... Fin de l'aventure...

 

Fermeture de kolossaldrupal.org dans...


Bonjour tout le monde,

Drupal évolue, les versions changent et Kolossaldrupal.org était essentiellement consacré à la version 6 de Drupal.

Autant dire que les infos présentées ici commencent à dater...

Faute de temps, je ne peux plus garder le site Kolossaldrupal à jour...

Je vous aurais bien proposé de reprendre le flambeau mais... c'est tellement simple de nos jours de se faire son propre site à soi...Pourquoi s'embêter alors ? :-)

Ce site restera donc en l'état, tel qu'il était en 2011...

Ah la la ! Cela ne nous rajeunit pas !

Manuel Vila - Avril 2016

Vérifier si une région est occupée

Traduction de la page http://drupal.org/node/517696
publiée / actualisée le 11 Mars 2011 sur drupal.org


Lorsqu'on personnalise page.tpl.php, il est possible de vérifier si une région est vide, en vérifiant le contenu de la variable correspondante qui contient les contenus de la région.

Par exemple :

Drupal 6

<?php
  
if($left) {
    
// do something
  
}
?>

Drupal 7

<?php
   
if($page['sidebar_first']) {
    
// do something
  
}
?>

Cependant, les variables region n'ont pas été déclarées pour les gabarits au niveau bloc, node et view..

Pour régler cette question, j'ai adapté une partie du code de block.module pour créer une fonction qui peut être insérée dans le fichier template.php de votre thème (c'est l'auteur de l'article original qui parle, pas kolossaldrupal).

La fonction prend un paramètre (un nom de région), et renvoie 1 si la région est vide ou 0 si elle est occupée. La fonction tient compte du path en cours et des paramètres de visibilité des blocs.

<?php
function region_empty($test_region) {
  
/* Vérifie si une région est occupée
   * renvoie 1 si elle est vide
   */

  
$test_empty 1;

  
$result db_query_range('SELECT n.pages, n.visibility FROM {blocks} n WHERE n.region="%s" AND n.theme="%s"'$test_region$GLOBALS['theme'], 010);
  if (
count($result) > 0) {
    while (
$node db_fetch_object($result))
    {

      if (
$node->visibility 2) {
        
$path drupal_get_path_alias($_GET['q']);

        
// Compare avec le chemin interne et l'alias de path  (s'il y en a).
        
$page_match drupal_match_path($path$node->pages);
        if (
$path != $_GET['q']) {
          
$page_match $page_match || drupal_match_path($_GET['q'], $node->pages);
        }
        
// Lorsque $block->visibility a la valeur 0, le bloc est affiché sur 
        // toutes les pages sauf celles répertoriées dans $block->pages. Lorsque la valeur est à 1, il 
        // n'est affiché que dans les pages répertoriées dans $block->pages.
        
$page_match = !($node->visibility xor $page_match);
      } else {
        
$page_match drupal_eval($block->pages);
      }

      if (
$page_match)
        
$test_empty 0;
    }
  }
  return 
$test_empty;
}
?>