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?