Puncte:0

Transmiteți argumente la adresa URL iframe entity_browser (modal)

drapel de

Am un formular Am un câmp de tip Date Range, mai am un alt câmp de tip entity_browser(modal) cu un widget de vizualizare de selecție.

Comportamentul normal atunci când dau clic pe butonul din câmpul browser al entității, este deschiderea modalului, dacă inspectăm codul se vede similar cu acesta:

<form 
   data-entity-browser-uuid="a9b7680318c9f1a1aca1abc308d8c6d0ac880b4a" 
   data-drupal-selector="entity-browser-event-browser-form" 
   action="/entity-browser/modal/event_browser?uuid=a9b7680318c9f1a1aca1abc308d8c6d0ac880b4a&original_path=/node/add/activity" 
   method="post" 
   id="entity-browser-event-browser-form">....
</form>

Ceea ce încerc să fac, este că, pe măsură ce datele sunt selectate, treceți aceste valori ca argumente la adresa URL iframe ceva de genul acesta:

<form 
   action="/entity-browser/modal/event_browser?uuid=a9b7680318c9f1a1aca1abc308d8c6d0ac880b4&aoriginal_path=/node/add/activity&start=12-02-2022&end=14-02-2022" 
....
</form>

Apoi din vizualizare luați aceste valori și filtrați conținutul.

Ce am pana acum

Revizuind codul modulului entity_browser, văd că clasa Modal (Drupal\entity_browser\Plugin\EntityBrowser\Display\Modal), ca parte a procesului de cârlig, aceasta trimite un eveniment la care se poate abona.

De fapt, pot adăuga parametri la argumentul de interogare din acest abonament, am codificat valorile ca test, dar nu se redau atunci când reîmprospătesc formularul în care creez conținutul care conține câmpul de tip entity_browser.

Exemplu:

funcția publică onAlterEntityBrowserDisplayData(AlterEntityBrowserDisplayData $event) {
    if ($event->getBrowserID() === „event_browser”) {
       $date = $event->getData();
     if (isset($date["parametri_interogare"]["interogare"])) {
        $data["query_parameters"]["query"]['start'] = '12-02-2022';
        $data["query_parameters"]["query"]['end'] = '14-02-2022';
        $event->setData($date);
      }
    }

  }

Dacă aș putea face acest lucru să funcționeze, atunci ar trebui să-mi dau seama cumva cu ajax pentru a continua să schimb aceste valori pe măsură ce se schimbă valorile din câmpul de dată.

Nu știu dacă acesta este cel mai bun mod de a face asta, nu știu ce crezi.

Actualizați

Abonamentul la eveniment funcționează, adică la redarea formularului de conținut, noii parametri sunt adăugați la url-ul iframe.

Singurul lucru care mi-ar lipsi este actualizarea parametrilor prin ajax atunci când se schimbă valorile câmpului de dată.

Pot adăuga un callback ajax la câmpul de dată care ascultă atunci când valoarea se schimbă, văd că există un câmp de intrare de tip ascuns unde pare să aibă valorile pe care entity_browser le va folosi. Problema este că nu are un id cu care să înlocuiască valorile.

Exemplu:

<input 
   data-drupal-selector="edit-field-event-entity-browser-entity-browser-path" 
   type="hidden" 
   name="field_evento[entity_browser][entity_browser][path]" 
   value="/entity-browser/modal/event_browser?uuid=1d0cbf414d0af02542405648750ccf4d157438fb&original_path=/node/add/activity&start=12-02-2022&end=14-02-2022"
>

Problema este că nu are un id cu care să înlocuiască valorile.

Ce se poate face în aceste cazuri?

Puncte:0
drapel cn
  1. Aș sugera să creați un widget de referință de entitate personalizat, care îl extinde pe cel pe care încercați să îl modificați.
  2. Apoi utilizați stările de formular Drupal pentru a face câmpul de referință al entității condiționat și afișați-l numai dacă intervalul de date este selectat.
  3. Adăugați cod JS care actualizează valorile transmise (adăugați datele selectate) atunci când este apăsat butonul de deschidere al browserului entității.
  4. în hook_form_entity_browser_media_entity_browser_modal_form_alter sau hook_inline_entity_form_entity_form_alter sau hook_field_widget_WIDGET_TYPE_form_alter face treaba de filtrare.

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.