Điểm:0

How to add a secondary Ajax submit to a regular node form?

lá cờ cn

I'm trying to add an Ajax submit to a regular node edit form (Drupal 9). I'm using Field Groups so that there's a series of tabs, and I've added a pair of "buttons" (Right now they're just markup <div>s, but I could change them to real buttons if that's recommended) that users can use to move forward and back through the tabs with some Javascript.

The ask now is that each time the tab focus changes, the form is submitted via Ajax. All the examples I'm finding seem to be doing something other than what I'm after. I've seen examples using completely custom forms, loading forms, and altering fields, but nothing that just adds the ability to submit a a regular node form with Ajax.

Things I've tried:

  • Adding an #ajax subarray of various sorts to the buttons and/or the regular submit element. Nothing Ajaxy at all has happened in any of these experiments
  • Using Javascript to trigger a click event on the submit, without and without an #ajax subarray. All I get is a regular submit with page refresh
  • Bypassing all of that just calling $.post($('#form-id').attr('action'), $('#form-id').serialize()). There's some semblance of Ajax submit going on as my custom hook_form_alter gets hit, but the node isn't saved/updated. I think that's failing because there's no proper submit/op value associated with it, and I haven't been able to figure out how to add/set it.

Can someone point me in the right direction?

Điểm:1
lá cờ cn

Điểm đầu tiên là cách đơn giản duy nhất. Biểu mẫu chỉnh sửa nút thông thường đã có sẵn các phần tử biểu mẫu Ajax. Bạn có thể kiểm tra mảng con "ajax" của drupal-settings-json được gửi tới trình duyệt.

Bạn cũng sẽ thấy cuộc gọi lại Ajax của riêng mình ở đây:

  "ajax": {
    "sửa-trường-bài-thêm": {
      "gọi lại": [
        "Drupal\Core\Field\Plugin\Field\FieldWidget\EntityReferenceAutocompleteWidget",
        "thêmThêmAjax"
      ],
      "wrapper": "field-article-add-more-wrapper",
      "hiệu ứng": "mờ dần",
      "sự kiện": "chuột xuống",
      "nhấn phím": đúng,
      "ngăn chặn": "nhấp chuột",
      "url": "\/node\/123\/edit?destination=\/admin\/content\u0026ajax_form=1",
      "loại hộp thoại": "ajax",
      "Gửi đi": {
        "_triggering_element_name": "field_article_add_more",
        "_triggering_element_value": "Thêm mục khác"
      }
    },
    "chỉnh sửa trường-đoạn-thêm-thêm-thêm-nút-văn bản": {
      "gọi lại": [
        "Drupal\paragraphs\Plugin\Field\FieldWidget\InlineParagraphsWidget",
        "thêmThêmAjax"
      ],
      ...

Nếu không, thì bạn phải gỡ lỗi PHP phía máy chủ. Nếu có, thì Javascript phía máy khách.

beltouche avatar
lá cờ cn
Có thẻ tập lệnh trong nguồn trang với data-drupal-selector="drupal-settings-json". Trình duyệt vừa lưu vào bộ nhớ cache một cách kiên trì một thử nghiệm mà tôi đã thử thêm mảng con #ajax vào một mục tùy ý. Mặt khác, không có bằng chứng về bất kỳ ajax nào được liên kết với biểu mẫu nút ở đó, cũng như khi tôi phân tích mảng $form w/ xdebug trong hook_form_alter của mình.
beltouche avatar
lá cờ cn
Bây giờ tôi có bốn câu hỏi: 1) Tôi có đang tìm đúng chỗ không? 2) Tôi chỉ cần thêm một chuỗi con #ajax vào nút gửi thông thường? 3) Gọi lại là gì? '::submitForm' có đủ hay tôi cần phải viết một hàm tùy chỉnh bằng cách nào đó gọi toàn bộ mảng hàm '#submit'? 4) Làm cách nào để kích hoạt Ajax thay vì gửi thông thường?
4uk4 avatar
lá cờ cn
Như đã nói, điểm 1 (#ajax) là đúng chỗ. Thêm tiện ích tự động hoàn thành tham chiếu thực thể vào biểu mẫu nút và bạn sẽ thấy nút bổ sung thêm ajax từ đầu ra json ở trên.
beltouche avatar
lá cờ cn
Tôi chấp nhận rằng điểm số 1 là con đường để đi. Câu hỏi "Tôi có đang tìm đúng chỗ không?" đang đề cập đến vị trí/cách tôi tìm thấy "drupal-settings-json" mà bạn đã đề cập.

Đă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.