Comment masquer un bloc vide?

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,

J'ai une question simple. J'ai une vue qui s'affiche en bloc, contextuellement à l'url active. Le problème c'est que le bloc s'affiche sur toutes les url, y compris lorsque la vue ne renvoie aucun contenu. Comment dans ce cas fait-on pour masquer le bloc?
Merci

Version de Drupal : 

Avec le template de la page, tu peux en php lui dire d'afficher le bloc que si sa valeur est non nulle.

Je pense qu'un code de ce style devrait faire ce que tu veux:

<?php
 
if (($block->content)!= 0):
?>
<?php
 
print $block->content
?>

<?php
 
endif;
?>

En fait, je me suis trompé et j'avais mal compris ton problème, je t'ai donné un code qui va dans les templates de bloc block.tpl.php ...

Ceci dit, peux-tu détailler ton problème parce que j'ai peut-être pas du bien tout comprendre ...

En tout cas, si en fait, c'est un bloc que tu as défini dans ton fichier .info et qui a un nom particulier, par exemple:
regions[mon_bloc] = Mon bloc

Alors il suffit de dire dans ta page template:

<?php
 
if ($mon_bloc):
?>
<?php
 
print $mon_bloc;
?>

<?php
 
endif;
?>

Là ça affiche le bloc si et seulement si il existe et est non nul.

non il s'agit bien d'un bloc et non d'une region. J'ai essayé de déplacer le script dans mon block.tpl.php mais sans succès. Je me suis peut-être mal expliqué.

J'ai une base de donnée d'artiste. Chaque artiste possède sa page avec un fichier audio affiché dans un bloc contextuel (fourni par views à partir de Filefield dans un contenu 'artiste'). Le fichier est donc affiché dans le bloc 'audio player', lui même affiché dans ma region 'header-top'.
Ma mission est de masquer le player audio (et non la region header-top toute entière) pour les artistes n'ayant pas uploader de fichier audio.

Je pense que c'est maintenant plus clair.

Ok. Tu peux créer un template block-header-top.tpl.php ou appliquer ça à tous les blocs dans block.tpl.php.

Dans le template tu mets le code php suivant:

<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="block block-<?php print $block->module ?>"> 
  <div class="blockinner">
<?php if ($block->subject): ?>
  <h2><?php print $block->subject ?></h2>
<?php endif;?>
<?php if ($block->content): ?>
    <div class="content">
      <?php print $block->content; ?>
    </div>
<?php endif;?>
  </div>
</div>

Ca affichera un titre si et seulement si il existe pareil pour le contenu.
Dans le cas contraire, ça ne doit rien afficher.

J'ai moi-même déjà utilisé cette astuce pour ne pas afficher les titres de blocs vides. Par exemple, si on ne met pas de titre à un bloc et si on a pas de if pour vérifier l'existence, ça peut afficher par défaut un titre vide:
<h2> </h2>

Avec le if qui force à ce que l'élément existe pour afficher le html, on n'a plus ce soucis.
Si ça ne marche toujours pas, je ne vois vraiment pas comment faire après ...

non seulement ça ne marche pas mais ça créé un effet indésirable : j'utilise collapsiblock et le script ne permet plus de rendre les blocs qui sont 'collapsed' 'expandable'.
Merci d'avoir essayé. On est peut-être pas si loin avec ce script...
Arnaud

Pas besoin de code pour cette étape et c'est plutot simple.

  • Dans avancé Filtres contextuels
  • Ajouter champ Global : Vide
  • Sélectionner "Cacher la vue" dans "Quand la valeur de filtre N'EST PAS disponible"

et c'est good ;)