ฉันมีแบบฟอร์ม ฉันมีฟิลด์ประเภทช่วงวันที่ ฉันยังมีฟิลด์ประเภท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"
>
ปัญหาคือมันไม่มีรหัสที่จะแทนที่ค่าด้วย
จะทำอย่างไรในกรณีเหล่านี้?