it-swarm.com.de

Block entfernen / ausblenden, wenn die Ansicht leer ist?

Gibt es eine API, um festzustellen, ob der Block leer ist? Grundsätzlich versuche ich, den Block in template_preprocess_page Ein-/auszublenden.

Hier ist mein aktueller Code:

 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]);
        } 
      }
    }
  }

Der obige Code gibt jedoch immer ein count von 1 Zurück, wenn ich $block Drucke.

Das Folgende funktioniert gut, ist aber keine gute Lösung. Ich möchte, dass es in allen Blöcken so dynamisch wie möglich ist.

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

Ich hatte das gleiche Verhalten mit "leeren" Feldern. Sofern Sie die Felder selbst nicht ausblenden, wird das Design/Markup weiterhin gerendert. Die Lösung für mich bestand darin, nach Feldern zu filtern, die "NICHT NULL" sind. (Vielleicht hängt es auch von dem "Zäune" ​​-Modul ab, das ich installiert habe. Nicht sicher, weil nicht getestet ...)

6
user20498

Wenn eine Ansicht mit einer Blockanzeige keine Ergebnisse zurückgibt, wird sie standardmäßig nicht gerendert. Es sei denn, Sie haben ein "Verhalten ohne Ergebnisse" festgelegt, das in der Ansicht angezeigt wird, wenn es leer ist. Stellen Sie also sicher, dass nichts eingestellt ist.

enter image description here

Eine Codierung sollte daher nicht erforderlich sein, es sei denn, Sie versuchen, etwas Benutzerdefinierteres zu tun. In diesem Fall möchten Sie möglicherweise klarstellen, was Sie erreichen möchten.

2
apower