Рейтинг:0

Передать аргументы URL-адресу iframe entity_browser (модальный)

флаг de

У меня есть форма. У меня есть поле типа «Диапазон дат», у меня также есть другое поле типа 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"
>

Проблема в том, что у него нет идентификатора для замены значений.

Что можно сделать в этих случаях?

Рейтинг:0
флаг cn
  1. Я бы предложил создать собственный виджет Entity Reference, расширяющий виджет, который вы пытаетесь изменить.
  2. Затем используйте состояния формы Drupal, чтобы сделать поле ссылки на объект условным и отображать его, только если выбран диапазон дат.
  3. Добавьте код JS, который обновляет отправленные значения (добавляет выбранные даты) при нажатии кнопки открытия браузера сущностей.
  4. в hook_form_entity_browser_media_entity_browser_modal_form_alter или же hook_inline_entity_form_entity_form_alter или же hook_field_widget_WIDGET_TYPE_form_alter выполнить работу по фильтрации.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.