Puncte:1

Cum se modifică vizibilitatea blocului Layout Builder?

drapel us

Există un cârlig pentru a modifica accesul la blocuri pentru blocurile plasate folosind Layout Builder? Văd că există hook_block_access; dar, din păcate, acest lucru nu este declanșat atunci când blocul este plasat folosind Layout Builder.

Se lucrează și aici: https://www.drupal.org/project/drupal/issues/2916876#comment-14279293 pentru a permite setărilor standard de vizibilitate a blocurilor să fie disponibile pentru blocurile Layout Builder; dar acest lucru permite numai pluginurile definite de vizibilitate. Aceasta este singura mea opțiune, să creez un plugin personalizat de vizibilitate bloc și să îl folosesc cu acel patch?

drapel in
Cred că Drupal elimină treptat cârligele în favoarea pluginurilor și abonaților la evenimente (puteți găsi multe articole despre de ce sunt mai bune). Nu aș fi surprins dacă patch-ul va ajunge să nu ofere o implementare hook. În plus, blocurile plasate în Block Layout folosesc deja pluginuri Condition. Nu are sens să creez un mecanism complet diferit când acesta poate fi folosit în schimb.
liquidcms avatar
drapel us
@Joseph, deci aveți idee care este evenimentul care controlează accesul la blocurile plasate cu constructorul de layout?
drapel in
Patch-ul pe care îl menționați folosește [Condition plugins](https://www.drupal.org/node/1961370), același tip care este folosit pe blocuri în Block Layout. [Puteți să vă creați propriile pluginuri Condition](https://drupalsun.com/2021/04/29/condition-plugins-visibility-drupal-8-9) la fel ca și cele încorporate.
berliner avatar
drapel bd
@liquidcms Poți să descrii mai detaliat ce vrei să obții?
liquidcms avatar
drapel us
@Joseph, mulțumesc pentru link și da, știu că cu patch-ul pe care îl menționez (deoarece LB nu folosește deja pluginuri Condition) aș putea face acest lucru cu un plugin - dar pare exagerat, deoarece acesta oferă o interfață de utilizare inutilă. Un cârlig (sau un handler de evenimente) ar fi mai eficient.
Puncte:1
drapel cn

Aceasta este singura mea opțiune, de a crea un plugin personalizat de vizibilitate bloc și îl folosești cu acel plasture?

Nu, configurarea vizibilității unei instanțe de bloc nu este singura opțiune. De asemenea, puteți controla accesul la nivel de plugin. Daca adaugati BlockPluginTrait::blockAccess la clasa de plugin controlați toate instanțele de bloc ale acestui plugin.

Cu toate acestea, cele mai comune în Layout Builder sunt blocurile personalizate în linie. Pluginul pentru aceste blocuri implementează deja această metodă, verificând accesul entității de conținut bloc subiacent. Deci in acest caz puteti folosi un carlig, dar pt block_content:

utilizați Drupal\Core\Access\AccessResult;
utilizați Drupal\Core\Entity\EntityInterface;
utilizați Drupal\Core\Session\AccountInterface;

/**
 * Implementează hook_ENTITY_TYPE_access().
 */
function mymodule_block_content_access(EntityInterface $entity, $operation, AccountInterface $cont) {
  if ($operațiune == 'vizualizare') {
    if ($entity->id() == 123) {
      returnează AccessResult::interzis();
    }
  }
  returnează AccessResult::neutral();
}
liquidcms avatar
drapel us
Nu am găsit niciodată acest lucru: „cele mai comune în Layout Builder sunt blocurile personalizate în linie” să fie cazul. Oricum, nu am crezut că este necesar, dar ar fi trebuit să menționez că este un bloc Views. Și pentru asta, cârligul block_content_access nu este folosit (dar informații bune de știut). Încă în căutarea.
4uk4 avatar
drapel cn
Aceasta este o caracteristică principală a interfeței de utilizare Layout Builder pe care o puteți crea din mers blocuri nereutilizabile. BTW clasa de plugin pentru blocuri Views implementează `blockAccess()` verificând accesul View. Deci, puteți configura accesul acolo sau chiar puteți scrie propriul plugin de acces Views dacă nu găsiți opțiunile de acces pe care le căutați.
liquidcms avatar
drapel us
Da, aș putea scrie un plugin care este mai mult ui care nu este necesar. Cred că probabil am descris greșit întrebarea. Ceea ce am sunt 2 blocuri (vizualizare) care se afișează sau nu pe baza conținutului. Am reușit să realizez ceea ce făceam cu scăparea unuia dintre blocuri și încorporarea părții de stare în Vedere folosind twig. Multumesc pentru ajutor. Îmi pare rău că nu am explicat suficient de bine.
4uk4 avatar
drapel cn
Nu este nimic în neregulă cu întrebarea inițială, altfel nu i-aș fi răspuns. Dar nu te puteai aștepta ca acesta să fie atât de specific. Puteți aplica răspunsul meu și la această sarcină specifică. Încorporați cele două vederi într-un bloc și puneți partea de condiție în blockAccess().

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.