it-swarm.com.de

So überprüfen Sie, ob der Block in page.html.twig leer ist

In meiner page.html.twig habe ich

<h2>{{ 'Block title'|t }}</h2>
<div class="">
  {{ drupal_block('leftblock') }}
  {{ drupal_block('rightblock') }}
</div>

Ich möchte Blocktitel nur anzeigen, wenn mein benutzerdefinierter linker und rechter Block gefüllt sind.

Vielen Dank.


Ich habe es versucht

Wenn ich es in meinem my_module.module mache

function my_module_preprocess_page(&$variables) {
  $block = Block::load('leftblock');
  if ($block) {
    $variables['leftblock'] = \Drupal::entityTypeManager()
      ->getViewBuilder('block')
      ->view($block);
  }
  $block = Block::load('rightblock');
  if ($block) {
    $variables['rightblock'] = \Drupal::entityTypeManager()
      ->getViewBuilder('block')
      ->view($block);
  }
}

und in meiner page.html.twig

{% if leftblock or rightblock %}
  <h2>{{ 'Block title'|t }}</h2>
{% endif %}
<div class="my-class">
  {{ leftblock }}
  {{ rightblock }}
</div>

Dieser {{rightblock}} zeigt den tatsächlichen Inhalt des Blocks im Zweig an (wenn er gefüllt ist), zeigt jedoch immer Blocktitel an, da der Block immer etwas enthält

wenn ich {{dump (rightblock)}} mache, bekomme ich das, wenn der Block leer oder gefüllt ist.

array (3) {["#cache"] => array (4) {["keys"] => array (3) {[0] => string (11) "entity_view" [1] => string (5 ) "block" [2] => string (22) "rightblock"} ["context"] => array (2) {[0] => string (28) "language: language_interface" [1] => string ( 8) "url.site"} ["tags"] => array (2) {[0] => string (10) "block_view" [1] => string (41) "config: block.block.rightblock" } ["max-age"] => int (-1)} ["#weight"] => int (0) ["#lazy_builder"] => array (2) {[0] => string (42) "Drupal\block\BlockViewBuilder :: lazyBuilder" [1] => Array (3) {[0] => Zeichenfolge (22) "rechter Block" [1] => Zeichenfolge (4) "voll" [2] => NULL }}}

Ich habe zwei Themen:

block-myLeft.html.twig

block-myRight.html.twig

1
Carlos

Ich konnte mein Problem so nicht lösen. Ich habe nur einen Block verwendet und 2 Variablen mit jeweils einer Inhaltsliste übergeben. Und dann überprüfe ich in twig), ob es Elemente in jeder Variablen gibt. Also zeige ich den Titel in diesem Moment an.

Block/myBlock.php

$build[] = [
  '#theme' => 'my_block',
  '#left_content' => $itemsL,
  '#right_content' => $itemsR,
];

Meine my-block.html.twig

{% if left_content is not empty or right_content is not empty %}
  <h2>{{ 'Block title'|t }}</h2>
{% endif %}
0
Carlos

Sie können Ihre Vorlage vorverarbeiten

function mytheme_preprocess_page(&$variables) {
  $block = \Drupal\block\Entity\Block::load('leftblock');
  if ($block) {
    $variables['leftblock'] = \Drupal::entityTypeManager()
      ->getViewBuilder('block')
      ->view($block);
  }
  $block = \Drupal\block\Entity\Block::load('rightblock');
  if ($block) {
    $variables['rightblock'] = \Drupal::entityTypeManager()
      ->getViewBuilder('block')
      ->view($block);
  }
}

Dann können Sie dies in Ihrer Vorlage tun

{% if rightblock or leftblock %}
  <h2>{{ 'Block title'|t }}</h2>
{% endif %}
<div class="">
  {{ leftblock }}
  {{ rightblock }}
</div>
0
Insasse

Es scheint dies ist ein Thema, das an anderer Stelle diskutiert wird . Vielleicht hilft Ihnen einer dieser Vorschläge?

Ohne genau zu wissen, wie ein "vollständiges" Lazybuilder-Array aussehen soll, kann ich nur einen spekulativen Vorschlag unterbreiten, der auf der Annahme basiert, was der Nullwert des Lazybuilder-Arrays bedeuten könnte. Wenn dies bedeutet, dass keine Daten vorhanden sind, können Sie möglicherweise Folgendes versuchen:

{% if leftblock['#lazy_builder'][1][2] is not null or rightblock['#lazy_builder'][1][2] is not null %}
    <h2>{{ 'Block title'|t }}</h2>
{% endif %}

Zur Verdeutlichung ist hier der variable Dump formatiert:

array(3) { 
    ["#cache"]=> array(4) { 
        ["keys"]=> array(3) { 
            [0]=> string(11) "entity_view" 
            [1]=> string(5) "block" 
            [2]=> string(22) "rightblock" 
        } 
        ["contexts"]=> array(2) { 
            [0]=> string(28) "languages:language_interface" 
            [1]=> string(8) "url.site" 
        } 
        ["tags"]=> array(2) { 
            [0]=> string(10) "block_view" 
            [1]=> string(41) "config:block.block.rightblock" 
        } 
        ["max-age"]=> int(-1) 
    } 
    ["#weight"]=> int(0) 
    ["#lazy_builder"]=> array(2) { 
        [0]=> string(42) "Drupal\block\BlockViewBuilder::lazyBuilder" 
        [1]=> array(3) { 
            [0]=> string(22) "rightblock" 
            [1]=> string(4) "full" 
            [2]=> NULL 
        } 
    } 
}
0
evantish