web-dev-qa-db-fra.com

Comment vérifier si le bloc est vide dans page.html.twig

Dans ma page.html.twig j'ai

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

Je veux afficher Titre du bloc uniquement si mes blocs gauche et droit personnalisés sont remplis.

Merci.


j'ai essayé

Si je fais dans mon my_module.module

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

et dans ma page.html.twig

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

Ce {{rightblock}} affiche le contenu réel du bloc en brindille (quand il est rempli), mais il affiche toujours Titre du bloc parce que le bloc a toujours quelque chose

si je fais {{dump (rightblock)}} je l'ai obtenu lorsque le bloc est vide ou rempli.

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 }}}

J'ai deux thèmes:

block-myLeft.html.twig

block-myRight.html.twig

1
Carlos

Je n'ai pas pu résoudre mon problème comme ça. Ce que j'ai fait, c'est d'utiliser un seul bloc et de passer 2 variables avec une liste de contenu dans chacune. Et puis dans twig je vérifie s'il y a des éléments dans chaque variable. Donc j'affiche le titre à ce moment-là.

Block/myBlock.php

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

Mon my-block.html.twig

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

Vous pouvez prétraiter votre modèle

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

Que vous pouvez le faire dans votre modèle

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

Il semble c'est un problème discuté ailleurs . Peut-être qu'une de ces propositions vous aidera?

Sans savoir exactement à quoi un tableau lazybuilder "complet" est censé ressembler, je ne peux que proposer une suggestion spéculative basée sur l'hypothèse concernant ce que la valeur nulle du tableau lazybuilder pourrait impliquer. Si cela signifie qu'il n'y a pas de données, vous pouvez peut-être essayer:

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

Pour plus de clarté, voici le vidage variable formaté:

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