Điểm:1

Làm cách nào một người có thể sử dụng lựa chọn của một phần tử Biểu mẫu web làm đối số trong phần tử Chọn thực thể bằng cách sử dụng Chế độ xem

lá cờ rs

Tôi hy vọng sử dụng tùy chọn đã chọn của một phần tử Biểu mẫu web ("Tổ chức") làm đối số trong phần tử Chọn thực thể ("Trang web") bằng cách sử dụng trình xử lý Chế độ xem.

tổ chức:
  '#type': thực thể_chọn
  '#title': 'Tên tổ chức của bạn là gì?'
  '#empty_option': 'Vui lòng chọn'
  '#target_type': nút
  '#selection_handler': 'mặc định:nút'
  '#selection_settings':
    target_bundles:
      tổ chức: tổ chức
Địa điểm:
  '#type': thực thể_chọn
  '#title': Trang web
  '#target_type': nút
  '#selection_handler': lượt xem
  '#selection_settings':
    lượt xem:
      view_name: trang web
      display_name: entity_reference_1
      tranh luận:
        - 'TÔI ĐẶT VÀO ĐÂY ĐỂ ĐẠI DIỆN TỔ CHỨC GÌ?'

Tôi không mong đợi điều này xảy ra với các mã thông báo, sẽ có sẵn sau khi gửi, nhưng tôi nghĩ rằng điều này có thể được thực hiện bằng cách sử dụng "dữ liệu", có sẵn cho các phần tử Twig được tính toán trên Webform. Tôi đã thử thêm '#ajax': đúng đến phần tử Chọn thực thể và sau đó đặt {{ data.organization }} làm đối số, nhưng điều đó không hiệu quả.

Cảm ơn trước cho bất kỳ lời khuyên!

Điểm:0
lá cờ rs

Vì vậy, đồng nghiệp của tôi, @nikathone, đã cung cấp đoạn mã sau để đưa vào tệp .module. Thay thế MYMODULE và MY_WEBFORM_ID theo nhu cầu của bạn:

<?php

sử dụng Drupal\Core\Form\FormStateInterface;
sử dụng Drupal\webform\Element\WebformEntitySelect;

/**
 * Triển khai hook_webform_submission_form_alter().
 */
function MYMODULE_webform_submission_form_alter(mảng &$form, FormStateInterface $form_state, $form_id) {
  $webform_id = $form['#webform_id'] ?? '';
  if ($webform_id !== 'MY_WEBFORM_ID') {
    trở lại;
  }

  $organization_element = $form['elements']['organization'] ?? [];
  $site_element = $form['elements']['site'] ?? [];
  if (!$organization_element || !$site_element || empty($site_element['#selection_settings']['view'])) {
    trở lại;
  }

  // Cài đặt các thuộc tính liên quan đến ajax.
  $site_element_wrapper_id = $site_element['#webform_id'] . '--vỏ bánh';
  $organization_element['#ajax'] = [
    'gọi lại' => 'MYMODULE_webform_submission_form_organization_element_ajax_callback',
    'trình bao bọc' => $site_element_wrapper_id,
  ];
  $site_element['#prefix'] = '<div id="' . $site_element_wrapper_id . '">';
  $site_element['#suffix'] = '</div>';

  // Đang cố truy xuất tổ chức có thể đã chọn.
  if (!($sselected_organization = $form_state->getValue('organization'))) {
    $selected_organization = $organization_element['#default_value'] ?? 0;
  }
  // Áp dụng tổ chức đã chọn nếu tìm thấy tổ chức đã chọn.
  nếu ($sselected_organization) {
    $site_element['#selection_settings']['view']['arguments'] = [$selected_organization];
    // Đặt lại các tùy chọn để chúng tôi có thể tạo lại nó. Nếu không có điều này
    // Phương thức ::setOptions ở trên sẽ không xử lý các đối số mới.
    $site_element['#options'] = [];
    $form_object = $form_state->getFormObject();
    $settings = ['webform_submission' => $form_object->getEntity()];
    WebformEntitySelect::setOptions($site_element, $settings);
  }

  $form['elements']['organization'] = $organization_element;
  $form['elements']['site'] = $site_element;
}

/**
 * Gọi lại Ajax cho phần tử trang web.
 *
 * @param mảng $form
 * Các yếu tố hình thức đầy đủ.
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * Trạng thái hình thức.
 *
 * @return mảng
 * Mảng phần tử trang web.
 */
function MYMODULE_webform_submission_form_organization_element_ajax_callback(mảng $form, FormStateInterface $form_state) {
  trả về $form['elements']['site'];
}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.