Puncte:0

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

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

Puncte:1
drapel cn

Primul punct este singura cale simplă. Un formular obișnuit de editare a nodurilor are deja elemente de formular Ajax. Puteți verifica subbarajul „ajax” al drupal-settings-json livrat în browser.

Ar trebui să vedeți și aici propriul apel invers Ajax:

  „ajax”: {
    „edit-field-article-add-more”: {
      "sună din nou": [
        „Drupal\Core\Field\Plugin\Field\FieldWidget\EntityReferenceAutocompleteWidget”,
        „addMoreAjax”
      ],
      "wrapper": "field-article-add-more-wrapper",
      „efect”: „decolorare”,
      „eveniment”: „în jos”,
      „apăsare taste”: adevărat,
      "prevent": "clic",
      "url": "\/node\/123\/edit?destination=\/admin\/content\u0026ajax_form=1",
      "dialogType": "ajax",
      "Trimite": {
        "_triggering_element_name": "field_article_add_more",
        "_triggering_element_value": "Adăugați un alt articol"
      }
    },
    „edit-field-paragraph-add-more-add-more-button-text”: {
      "sună din nou": [
        „Drupal\paragraphs\Plugin\Field\FieldWidget\InlineParagraphsWidget”,
        „addMoreAjax”
      ],
      ...

Dacă nu, atunci trebuie să depanați PHP pe server. Dacă da, atunci Javascript pe partea clientului.

beltouche avatar
drapel cn
Există o etichetă de script în sursa paginii cu data-drupal-selector="drupal-settings-json". Browserul tocmai a stocat cu tenacitate un experiment în care am încercat să adaug un subbary #ajax la un element arbitrar. În caz contrar, nu există nicio dovadă a vreunui ajax asociat cu forma nodului nici acolo, nici atunci când analizez matricea $form cu xdebug în hook_form_alter.
beltouche avatar
drapel cn
Acum am patru intrebari: 1) Caut în locul potrivit? 2) Adaug doar un subbary #ajax la butonul obișnuit de trimitere? 3) Care este apelul înapoi? Este „::submitForm” suficient sau trebuie să scriu o funcție personalizată care invocă cumva întreaga matrice de funcții „#submit”? 4) Cum declanșez Ajax în loc de trimiterea obișnuită?
4uk4 avatar
drapel cn
După cum s-a spus, punctul 1 (#ajax) este locul potrivit. Adăugați un widget de completare automată a referințelor de entitate la formularul de nod și veți vedea butonul ajax add more din rezultatul json de mai sus.
beltouche avatar
drapel cn
Accept că punctul 1 este calea de urmat. Semnalul „Ma caut în locul potrivit?” se referea la unde/cum am găsit „drupal-settings-json” pe care l-ai menționat.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.