Puncte:3

Preveniți redarea regiunilor Layout Builder care nu au conținut

drapel in

Folosind Layout Builder, atunci când adăugați un bloc la un aspect care are controale de acces și un utilizator vizitează o pagină fără acces, aspectul este gol.

Cum se împiedică redarea aspectului dacă conținutul său este gol? In timp ce {% if content.foo|render|striptags|trim %} trucul funcționează pentru șabloanele bloc, nu îmi pot da seama cum să obțin același efect cu șabloanele de aspect.

Rezultatul final este că am un marcaj suplimentar în pagină, care este clasificat și creând umplutură suplimentară și spațiu vertical între regiunile de aspect populate.

Editați | ×:

Am actualizat acum cu un eveniment de care Layout Builder are nevoie:

clasa MyModuleEventSubscriber implementează EventSubscriberInterface {

  /**
   * Managerul de evenimente de răspuns Layout Builder.
   *
   * @param SectionComponentBuildRenderArrayEvent $event
   * Creați evenimentul de randare.
   */
  funcția publică onBuildRender(SectionComponentBuildRenderArrayEvent $event) {
    $id = $event->getPlugin()->getPluginDefinition()['id'];

    if ($id == 'inline_block' && !$event->inPreview()) {
      $build = $event->getBuild();
      $build['#create_placeholder'] = FALS;
      $event->setBuild($build);
    }
  }

  /**
   * {@inheritdoc}
   */
  funcție publică statică getSubscribedEvents(): matrice {
    $events[LayoutBuilderEvents::SECTION_COMPONENT_BUILD_RENDER_ARRAY] = ['onBuildRender', 110];
    returnează $evenimente;
  }

}

xdebug

introduceți descrierea imaginii aici

Puncte:1
drapel cn

Acest lucru ar putea fi cauzat de substituent. Drupal formatează substituenții ca etichetă HTML. În testul de randare, striptag-uri elimină astfel de substituenți, chiar dacă mai târziu, când are loc redarea reală, acesta este umplut cu un bloc construit leneș.

Puteți evita acest lucru, în detrimentul performanței cache-ului, prin negarea blocului care este substituit:

/**
 * Implementează hook_block_build_BASE_BLOCK_ID_alter().
 */
function mymodule_block_build_example_block_alter(array &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
  // Dezactivează substituentul acestui bloc.
  $build['#create_placeholder'] = FALS;
}

Vedea BigPipe poate exclude anumite blocuri? Acest lucru nu depinde de activarea BigPipe sau nu, dar cred că pentru ambele probleme soluția este aceeași.

drapel cn
Comentariile nu sunt pentru discuții extinse; această conversație a fost [mutată în chat](https://chat.stackexchange.com/rooms/129156/discussion-on-answer-by-4k4-prevent-rendering-of-layout-builder-regions-that-hav) .

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.