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;
}
?>

Commentaires

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <css>, <php>, <html>, <ccss>, <ccss>, <drupal5>, <drupal6>, <html>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".
  • You may use [view:viewname] tags to display listings of nodes.

Plus d'informations sur les options de formatage

CAPTCHA
Cette question permet d'éviter le spam :
1 + 3 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.