web-dev-qa-db-fra.com

Supprimer / Masquer le bloc si la vue est vide?

Existe-t-il une API pour savoir si le bloc est vide? Fondamentalement, ce que j'essaie de faire est de cacher/désinstaller le bloc à l'intérieur template_preprocess_page.

Voici mon code actuel:

 if ($variables['page']['rail_full']) {
    foreach ($variables['page']['rail_full'] as $keys => $blocks) {
      if (isset($blocks['content']['#views_contextual_links_info'])) {
        $name = (isset($blocks['content']['#views_contextual_links_info']['views_ui'])) ? $blocks['content']['#views_contextual_links_info']['views_ui']['view']->name : '';
        $display_id = explode('-', $blocks['#block']->delta);
        $block = views_get_view_result($name, $display_id[1]);
        if (empty($block)) {
          unset($variables['page']['rail_full'][$keys]);
        } 
      }
    }
  }

Mais le code ci-dessus renvoie toujours un count de 1 lorsque j'imprime $block.

Ce qui suit fonctionne bien mais n'est pas une bonne solution. Je veux qu'il soit dynamique dans tous les blocs possible.

if (!isset($variables['node']->field_author_favorite_links['en'])) {
    unset($variables['page']['rail_full']['views_franchise_page-block_2']);
}

if (!isset($variables['node']->field_article_column['en'])) {
    unset($variables['page']['rail_full']['views_franchise_page-block_3']);
}
5
ninjascorner

J'ai eu le même comportement avec des champs "vides". Sauf si vous ne masquez pas les champs eux-mêmes, la conception/le balisage s'affiche toujours. La solution pour moi était de filtrer les champs "NON NULL". (Peut-être que cela dépend du module "clôtures" que j'ai installé aussi. Pas sûr, car non testé ...)

6
user20498

Par défaut, si une vue avec un affichage de bloc ne renvoie aucun résultat, elle ne sera pas rendue. C'est à moins que vous n'ayez défini un "comportement sans résultats" que la vue affichera lorsqu'elle sera vide. Vérifiez donc que rien n'a été défini.

enter image description here

Le codage ne devrait donc pas être nécessaire, sauf si vous essayez de faire quelque chose de plus personnalisé. Si c'est le cas, vous voudrez peut-être clarifier ce que vous essayez d'accomplir.

2
apower