Tôi có một biểu mẫu Tôi có một trường thuộc loại Phạm vi Ngày, tôi cũng có một trường khác thuộc loại entity_browser(modal) với một tiện ích dạng xem lựa chọn.
Hành vi bình thường khi tôi nhấp vào Nút của trường trình duyệt thực thể, là mở phương thức, nếu chúng tôi kiểm tra mã, nó có thể thấy tương tự như sau:
<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>
Điều tôi đang cố gắng thực hiện là khi ngày được chọn, hãy chuyển các giá trị này làm đối số cho url iframe đại loại như sau:
<form
action="/entity-browser/modal/event_browser?uuid=a9b7680318c9f1a1aca1abc308d8c6d0ac880b4&aoriginal_path=/node/add/activity&start=12-02-2022&end=14-02-2022"
....
</form>
Sau đó, từ chế độ xem, hãy lấy các giá trị này và lọc nội dung.
Những gì tôi có cho đến nay
Xem lại mã của mô-đun entity_browser, tôi thấy rằng lớp Phương thức (Drupal\entity_browser\Plugin\EntityBrowser\Display\Modal
), là một phần của móc quy trình, điều này sẽ gửi một sự kiện mà một người có thể đăng ký.
Trên thực tế, tôi có thể thêm tham số vào đối số truy vấn trong đăng ký này, tôi đã mã hóa các giá trị dưới dạng thử nghiệm, nhưng chúng không hiển thị khi tôi làm mới biểu mẫu nơi tôi tạo nội dung chứa trường loại entity_browser.
Ví dụ:
chức năng công khai trênAlterEntityBrowserDisplayData(AlterEntityBrowserDisplayData $event) {
if ($event->getBrowserID() === "event_browser") {
$data = $event->getData();
if (isset($data["query_parameters"]["query"])) {
$data["query_parameters"]["query"]['start'] = '12-02-2022';
$data["query_parameters"]["query"]['end'] = '14-02-2022';
$event->setData($data);
}
}
}
Nếu tôi có thể làm cho nó hoạt động, thì tôi phải tìm ra cách nào đó với ajax để tiếp tục thay đổi các giá trị này khi các giá trị trong trường ngày tháng thay đổi.
Tôi không biết nếu đây là cách tốt nhất để làm điều đó, tôi không biết bạn nghĩ gì.
Cập nhật
Đăng ký sự kiện đang hoạt động, tức là khi hiển thị biểu mẫu nội dung, các tham số mới sẽ được thêm vào url iframe.
Điều duy nhất mà tôi sẽ thiếu là cập nhật các tham số qua ajax khi các giá trị của trường ngày thay đổi.
Tôi có thể thêm lệnh gọi lại ajax vào trường ngày để lắng nghe khi giá trị thay đổi, tôi thấy có một trường nhập loại bị ẩn ở đó dường như có các giá trị mà entity_browser sẽ sử dụng. Vấn đề là nó không có id để thay thế các giá trị.
Ví dụ:
<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"
>
Vấn đề là nó không có id để thay thế các giá trị.
Có thể làm gì trong những trường hợp này?