У меня есть форма. У меня есть поле типа «Диапазон дат», у меня также есть другое поле типа entity_browser (модальное) с виджетом выбора.
Обычное поведение, когда я нажимаю кнопку в поле браузера объектов, — это открытие модального окна, если мы проверим код, это можно увидеть примерно так:
<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>
Что я пытаюсь сделать, так это то, что при выборе дат передайте эти значения в качестве аргументов URL-адресу iframe примерно так:
<form
action="/entity-browser/modal/event_browser?uuid=a9b7680318c9f1a1aca1abc308d8c6d0ac880b4&aoriginal_path=/node/add/activity&start=12-02-2022&end=14-02-2022"
....
</form>
Затем из представления возьмите эти значения и отфильтруйте содержимое.
Что у меня есть до сих пор
Просматривая код модуля entity_browser, я вижу, что класс Modal (Drupal\entity_browser\Plugin\EntityBrowser\Display\Modal
), как часть хука процесса, это отправка события, на которое можно подписаться.
Фактически, я могу добавить параметры к аргументу запроса в этой подписке, я закодировал значения в качестве теста, но они не отображаются, когда я обновляю форму, где я создаю контент, содержащий поле типа entity_browser.
Пример:
общедоступная функция onAlterEntityBrowserDisplayData (AlterEntityBrowserDisplayData $event) {
если ($event->getBrowserID() === "event_browser") {
$данные = $event->getData();
если (isset($data["query_parameters"]["query"])) {
$data["query_parameters"]["query"]['start'] = '12-02-2022';
$data["query_parameters"]["query"]['end'] = '14-02-2022';
$событие->setData($данные);
}
}
}
Если бы я мог заставить это работать, мне пришлось бы каким-то образом придумать ajax, чтобы продолжать изменять эти значения по мере изменения значений в поле даты.
Я не знаю, лучший ли это способ сделать это, я не знаю, что вы думаете.
Обновлять
Подписка на событие работает, то есть при отрисовке формы контента в url iframe добавляются новые параметры.
Единственное, чего бы мне не хватило, так это обновления параметров через ajax при изменении значений поля даты.
Я могу добавить обратный вызов ajax в поле даты, которое слушает, когда значение изменяется, я вижу, что есть скрытое поле ввода типа, где, кажется, есть значения, которые будет использовать entity_browser. Проблема в том, что у него нет идентификатора для замены значений.
Пример:
<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"
>
Проблема в том, что у него нет идентификатора для замены значений.
Что можно сделать в этих случаях?