Puncte:0

Cum se salvează în mod programatic aspectul unui nod?

drapel us

Nu sunt sigur dacă aceasta este cea mai bună abordare, dar funcționează bine... aproape.

Folosesc modulul Layout Builder Modal care, în layout builder, deschide configurarea blocurilor într-un modal. Acest lucru este grozav, dar aș dori să extind această capacitate la front-end, astfel încât să pot configura un bloc de aspect fără a fi nevoie să intru în aspectul nodului.

Dacă plasez pur și simplu linkul contextual pe care îl creează acest modul în pagina mea de nod; desigur, deschide modulul necesar și îmi permite să schimb configurația blocului specific.La trimitere, configurația blocului este modificată și modulul se închide, dar aspectul nu este salvat pentru a utiliza această nouă configurație a blocului. Acest lucru poate fi văzut când merg la aspectul nodului și afirmă că sunt modificări în așteptare. Dacă salvez acum aspectul, văd modificările de configurare a blocului.

Cum pot forța în mod programatic salvarea aspectului nodului?

Puncte:2
drapel bd

Deși acesta nu este un răspuns real la întrebarea dvs. „Cum pot forța în mod programatic salvarea aspectului nodului?”, am vrut să vă îndrept către Layout Builder IPE modul, pe care l-am creat pentru a rezolva un caz de utilizare similar cu al dumneavoastră: Oferiți posibilități de editare direct din pagina de vizualizare a unui nod.

Dacă aceasta nu este o opțiune pentru dvs., atunci soluția programatică probabil evoluează în jurul:

  1. conectarea la formularul de trimitere
  2. adăugând handler-ul de trimitere personalizat
  3. luați configurația blocului cumva
  4. actualizați OverridesSectionStorage pentru nod
  5. salvați nodul
  6. ștergeți spațiul de stocare temporar pentru generatorul de aspect al nodului respectiv

Cel puțin asta îmi amintesc. În timp ce lucram la Layout Builder IPE, am găsit că întreaga structură este puțin complicată să fiu sincer, care a fost motivul principal pentru a încerca să facem acest lucru o dată într-un mod mai generic.

Actualizați Am căutat câteva detalii suplimentare care ar putea ajuta cu asta:

Pentru a obține secțiunile pentru un nod activat pentru generatorul de aspect, puteți utiliza LayoutEntityHelperTrait::getSectionStorageForEntity, de exemplu.:

$section_storage = $this->getSectionStorageForEntity($node);
$secțiuni = $section_storage->getSections();

Acest $secţiuni variabila este o matrice de secțiuni, fiecare secțiune conținând componente de secțiune. Puteți repeta peste ele până când găsiți blocul pe care îl căutați și faceți ceea ce trebuie să faceți pentru a actualiza configurația (cod netestat):

foreach ($secțiuni ca $delta => $secțiune) {
  foreach ($secțiune->getComponents() ca $component) {
    // Fiecare componentă este un obiect de tip \Drupal\layout_builder\SectionComponent.
    // Pentru a identifica blocul, puteți utiliza id-ul pluginului (sau UUID-ul dacă
    // există mai multe blocuri de același tip). 
    $plugin_id = $component->getPluginId();
    dacă ($plugin_id == 'BLOCK_PLUGIN_ID') {
      $configurare = $component->get('configurare');
      // Actualizați configurația și apoi actualizați componenta.
      $component->setConfiguration($configurare);
    }
  }
}

Odată ce modificările necesare au fost făcute, secțiunile pot fi salvate înapoi în nod utilizând acest lucru:

$nod->get(OverridesSectionStorage::FIELD_NAME)->setValue($sections);

Și pentru a șterge temperatura, ceva de genul acesta ar trebui să funcționeze, deși acest lucru ar trebui să folosească DI, evident:

\Drupal::service('layout_builder.tempstore_repository')->delete($section_storage);
drapel cn
Comentariile nu sunt pentru discuții extinse; această conversație a fost [mutată în chat](https://chat.stackexchange.com/rooms/136485/discussion-on-answer-by-berliner-how-to-programmatical-save-a-nodes-layout).

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.