Score:0

ส่งผ่านอาร์กิวเมนต์ไปยัง URL ของ iframe ของ entity_browser (โมดอล)

ธง de

ฉันมีแบบฟอร์ม ฉันมีฟิลด์ประเภทช่วงวันที่ ฉันยังมีฟิลด์ประเภทentity_browser(modal) อีกฟิลด์หนึ่งที่มีวิดเจ็ตมุมมองการเลือก

ลักษณะการทำงานปกติเมื่อฉันคลิกปุ่มของฟิลด์เบราว์เซอร์เอนทิตี คือการเปิดโมดอล หากเราตรวจสอบโค้ด จะเห็นได้ดังนี้:

<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>

สิ่งที่ฉันพยายามทำคือเมื่อเลือกวันที่แล้ว ให้ส่งค่าเหล่านี้เป็นอาร์กิวเมนต์ไปยัง iframe url ดังนี้:

<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) ซึ่งเป็นส่วนหนึ่งของ hook ของกระบวนการ สิ่งนี้จะส่งเหตุการณ์ที่สามารถสมัครรับข้อมูลได้

อันที่จริง ฉันสามารถเพิ่มพารามิเตอร์ให้กับอาร์กิวเมนต์คิวรีในการสมัครสมาชิกนี้ ฉันได้ฮาร์โค้ดค่าเป็นแบบทดสอบแล้ว แต่ค่าเหล่านั้นไม่แสดงผลเมื่อฉันรีเฟรชฟอร์มที่ฉันสร้างเนื้อหาที่มีฟิลด์ประเภทentity_browser

ตัวอย่าง:

ฟังก์ชั่นสาธารณะ onAlterEntityBrowserDisplayData (เหตุการณ์ AlterEntityBrowserDisplayData $) {
    ถ้า ($event->getBrowserID() === "event_browser") {
       $data = $event->getData();
     ถ้า (isset($data["query_parameters"]["query"])) {
        $data["query_parameters"]["query"]['start'] = '12-02-2022';
        $data["query_parameters"]["query"]['end'] = '14-02-2022';
        $event->setData($data);
      }
    }

  }

ถ้าฉันทำให้มันใช้งานได้ ฉันก็ต้องหาวิธีบางอย่างกับ ajax เพื่อเปลี่ยนค่าเหล่านี้ไปเรื่อย ๆ เมื่อค่าในฟิลด์วันที่เปลี่ยนไป

ฉันไม่รู้ว่าวิธีนี้เป็นวิธีที่ดีที่สุดหรือไม่ ฉันไม่รู้ว่าคุณคิดอย่างไร

อัปเดต

การสมัครสมาชิกเหตุการณ์กำลังทำงานอยู่ กล่าวคือ เมื่อแสดงฟอร์มเนื้อหา พารามิเตอร์ใหม่จะถูกเพิ่มไปยัง iframe url

สิ่งเดียวที่ฉันจะขาดหายไปคือการอัพเดตพารามิเตอร์ผ่าน ajax เมื่อค่าของฟิลด์วันที่เปลี่ยนไป

ฉันสามารถเพิ่ม ajax callback ลงในฟิลด์วันที่ที่จะฟังเมื่อค่าเปลี่ยนแปลง ฉันเห็นว่ามีฟิลด์อินพุตประเภทซ่อนอยู่ซึ่งดูเหมือนว่าจะมีค่าที่ 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"
>

ปัญหาคือมันไม่มีรหัสที่จะแทนที่ค่าด้วย

จะทำอย่างไรในกรณีเหล่านี้?

Score:0
ธง cn
  1. ฉันขอแนะนำให้สร้างวิดเจ็ตอ้างอิงเอนทิตีที่กำหนดเอง ซึ่งจะขยายวิดเจ็ตที่คุณพยายามแก้ไข
  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 ทำหน้าที่กรอง

โพสต์คำตอบ

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