Score:1

เราจะใช้การเลือกองค์ประกอบ Webform หนึ่งรายการเป็นอาร์กิวเมนต์ในองค์ประกอบ Entity Select โดยใช้ Views ได้อย่างไร

ธง rs

ฉันหวังว่าจะใช้ตัวเลือกที่เลือกขององค์ประกอบ Webform หนึ่งรายการ ("องค์กร") เป็นอาร์กิวเมนต์ในองค์ประกอบ Entity Select ("ไซต์") โดยใช้ตัวจัดการมุมมอง

องค์กร:
  '#type': entity_select
  '#title': 'องค์กรของคุณชื่ออะไร'
  '#empty_option': 'โปรดเลือก'
  '#target_type': โหนด
  '#selection_handler': 'ค่าเริ่มต้น:โหนด'
  '#selection_settings':
    target_bundles:
      องค์กร: องค์กร
งาน:
  '#type': entity_select
  '#title': เว็บไซต์
  '#target_type': โหนด
  '#selection_handler': มุมมอง
  '#selection_settings':
    ดู:
      view_name: ไซต์
      display_name: เอนทิตี_reference_1
      ข้อโต้แย้ง:
        - 'ฉันจะใส่อะไรที่นี่เพื่อเป็นตัวแทนขององค์กร'

ฉันไม่คาดหวังว่าสิ่งนี้จะเกิดขึ้นกับโทเค็นซึ่งพร้อมใช้งานหลังจากส่ง แต่ฉันคิดว่าสิ่งนี้อาจทำได้โดยใช้ "ข้อมูล" ซึ่งมีให้สำหรับองค์ประกอบ Webform Computed Twig ฉันพยายามเพิ่ม '#ajax': จริง ไปยังองค์ประกอบ เลือกเอนทิตี แล้ววาง {{ data.organization }} เป็นอาร์กิวเมนต์ แต่ก็ไม่ได้ผล

ขอบคุณล่วงหน้าสำหรับคำแนะนำ!

Score:0
ธง rs

ดังนั้น @nikathone เพื่อนร่วมงานของฉันจึงให้รหัสต่อไปนี้เพื่อใส่ในไฟล์ .module แทนที่ MYMODULE และ MY_WEBFORM_ID ตามความต้องการของคุณ:

<?php

ใช้ Drupal\Core\Form\FormStateInterface;
ใช้ Drupal\webform\Element\WebformEntitySelect;

/**
 * ใช้ hook_webform_submission_form_alter()
 */
ฟังก์ชัน MYMODULE_webform_submission_form_alter (อาร์เรย์ &$form, FormStateInterface $form_state, $form_id) {
  $webform_id = $form['#webform_id'] ?? '';
  ถ้า ($webform_id !== 'MY_WEBFORM_ID') {
    กลับ;
  }

  $organization_element = $form['elements']['organization'] ?? [];
  $site_element = $form['elements']['site'] ?? [];
  ถ้า (!$organization_element || !$site_element || ว่าง($site_element['#selection_settings']['view'])) {
    กลับ;
  }

  // การตั้งค่าคุณสมบัติที่เกี่ยวข้องกับ ajax
  $site_element_wrapper_id = $site_element['#webform_id'] '--ห่อ';
  $organization_element['#ajax'] = [
    'callback' => 'MYMODULE_webform_submission_form_organization_element_ajax_callback',
    'wrapper' => $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['elements']['organization'] = $organization_element;
  $form['elements']['site'] = $site_element;
}

/**
 * โทรกลับ Ajax สำหรับองค์ประกอบของไซต์
 *
 * @param อาร์เรย์ $form
 * องค์ประกอบรูปแบบเต็ม
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * สถานะแบบฟอร์ม
 *
 * @return อาร์เรย์
 * อาร์เรย์องค์ประกอบของไซต์
 */
ฟังก์ชัน MYMODULE_webform_submission_form_organization_element_ajax_callback (อาร์เรย์ $form, FormStateInterface $form_state) {
  ส่งคืน $form['elements']['site'];
}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา