Рейтинг:1

Как можно использовать выбор одного элемента веб-формы в качестве аргумента в элементе Entity Select с использованием представлений

флаг rs

Я надеюсь использовать выбранный параметр одного элемента веб-формы («Организация») в качестве аргумента в элементе Entity Select («Сайт») с использованием обработчика представлений.

организация:
  '#тип': entity_select
  '#title': 'Как называется ваша организация?'
  '#empty_option': 'Пожалуйста, выберите'
  '#target_type': узел
  '#selection_handler': 'по умолчанию: узел'
  '#выбор_настройки':
    target_bundles:
      организации: организации
сайт:
  '#тип': entity_select
  '#название': Сайт
  '#target_type': узел
  '#selection_handler': просмотры
  '#выбор_настройки':
    Посмотреть:
      view_name: сайты
      отображаемое_имя: entity_reference_1
      аргументы:
        - ЧТО Я ЗДЕСЬ ПОСТАВЛЯЮ, ЧТОБЫ ПРЕДСТАВЛЯТЬ ОРГАНИЗАЦИЮ?

Я не ожидал, что это произойдет с токенами, которые становятся доступными после отправки, но я думал, что это потенциально может быть сделано с использованием «данных», которые доступны для элементов Webform Computed Twig. я пытался добавить '#ajax': правда к элементу Entity Select, а затем помещая {{ data.organization }} в качестве аргумента, но это не сработало.

Заранее спасибо за любые советы!

Рейтинг:0
флаг rs

Итак, мой коллега @nikathone предоставил следующий код для помещения в файл .module. Замените MYMODULE и MY_WEBFORM_ID в соответствии с вашими потребностями:

<?php

используйте Drupal\Core\Form\FormStateInterface;
используйте Drupal\webform\Element\WebformEntitySelect;

/**
 * Реализует hook_webform_submission_form_alter().
 */
function MYMODULE_webform_submission_form_alter (массив и $ форма, FormStateInterface $ form_state, $ form_id) {
  $webform_id = $form['#webform_id'] ?? '';
  если ($webform_id !== 'MY_WEBFORM_ID') {
    возвращаться;
  }

  $organization_element = $form['элементы']['организация'] ?? [];
  $site_element = $form['элементы']['сайт'] ?? [];
  if (!$organization_element || !$site_element || пусто($site_element['#selection_settings']['view'])) {
    возвращаться;
  }

  // Настройки свойств, связанных с ajax.
  $site_element_wrapper_id = $site_element['#webform_id'] . '--обертка';
  $organization_element['#ajax'] = [
    'обратный вызов' => 'MYMODULE_webform_submission_form_organization_element_ajax_callback',
    'обертка' => $site_element_wrapper_id,
  ];
  $site_element['#prefix'] = '<div id="' . $site_element_wrapper_id . '">';
  $site_element['#suffix'] = '</div>';

  // Попытка получить возможную выбранную организацию.
  если (!($selected_organization = $form_state->getValue('organization'))) {
    $selected_organization = $organization_element['#default_value'] ?? 0;
  }
  // Применить выбранную организацию, если она найдена.
  если ($selected_organization) {
    $site_element['#selection_settings']['view']['arguments'] = [$selected_organization];
    // Сбросьте параметры, чтобы мы могли заполнить его снова. Без этого
    // Метод ::setOptions выше не будет обрабатывать новые аргументы.
    $site_element['#options'] = [];
    $form_object = $form_state->getFormObject();
    $settings = ['webform_submission' => $form_object->getEntity()];
    WebformEntitySelect::setOptions($site_element, $settings);
  }

  $form['элементы']['организация'] = $organization_element;
  $form['элементы']['сайт'] = $site_element;
}

/**
 * Обратный вызов Ajax для элемента сайта.
 *
 * @param массив $form
 * Элемент полной формы.
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * Состояние формы.
 *
 * @возвратный массив
 * Массив элементов сайта.
 */
function MYMODULE_webform_submission_form_organization_element_ajax_callback (массив $ form, FormStateInterface $ form_state) {
  вернуть $form['элементы']['сайт'];
}

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

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