Vérifier si une région est occupée
Référence en anglais sur drupal.org : 5 Août 2009 - 14h30
http://drupal.org/node/517696
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 :
<?php
if($left) {
// 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'], 0, 10);
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;
}
?>- Version imprimable
- Ajouter un commentaire
- 1173 lectures


Commentaires récents
il y a 6 heures 6 min
il y a 23 heures 53 min
il y a 1 semaine 3 jours
il y a 2 semaines 3 jours
il y a 3 semaines 12 heures
il y a 3 semaines 6 jours
il y a 4 semaines 1 heure
il y a 4 semaines 3 heures
il y a 4 semaines 2 jours
il y a 4 semaines 6 jours