Puncte:0

Transmiteți o valoare prin URL unui formular de editare a nodului și utilizați-o pentru a redirecționa după salvarea nodului

drapel cn

Am un nod care include o serie de vederi încorporate.La afișare, trebuie să transmit o valoare prin argumente URL (http://example.org/node/x?id=y), astfel încât vizualizările să poată obține informațiile corespunzătoare. Utilizatorul trebuie să poată edita acest nod, dar când salvează și revine la nod, a pierdut id=y parte și afișajul este incomplet.

Știu că pot folosi hook_form_alter() pentru a redirecționa, dar nu îmi pot da seama cum pot redirecționa după ce nodul este salvat folosind acel argument URL?

gmak avatar
drapel cn
@apaderno - Vă mulțumesc că mi-ați editat postarea pentru a fi clar.
drapel in
Ce versiune de Drupal folosești?
gmak avatar
drapel cn
Folosesc Drupal 9
Puncte:0
drapel us

Folosind hook_form_alter(), puteți adăuga un handler de trimitere care setează redirecționarea. Codul pentru gestionarea trimiterii ar fi similar cu următorul.

funcția mymodule_node_edit_submit(matrice &$form, FormStateInterface $form_state) {
  $nod = $form_state->getFormObject()->getEntity();
  $id = \Drupal::request()->query->get('id');
  $form_state->setRedirect('entity.node.canonical', ['node' => $node->id()], [query => ['id' => $id]]);
}

Codul pentru hook_form_BASE_FORM_ID_alter() ar fi pur și simplu următorul.

funcția mymodule_form_node_form_alter(&$form, FormStateInterface $form_state) {
  $nod = $form_state->getFormObject()->getEntity();

  // Deoarece acest cârlig este invocat pentru fiecare nod, verificați tipul său de conținut.
  if ($node->getType() == „tipul de conținut care vă interesează”) {
    $form['actions']['submit']['#submit'][] = 'mymodule_node_edit_submit';
  }
}

The hook_form_FORM_ID_alter() implementarea ar trebui denumită mymodule_form_node_<content_type_machine_name>_alter(). (A inlocui modulul meu cu numele mașinii modulului, <content_type_machine_name> cu numele mașinii tipului de conținut.) În acest caz, deoarece hook-ul este invocat numai pentru un tip de conținut, nu este nevoie să verifice tipul de conținut al nodului înainte de a adăuga handler-ul de trimitere.

gmak avatar
drapel cn
Ceva nu funcționează. Dacă adresa mea URL este ```http://example.org/node/123?id=57```, după trimiterea formularului este redirecționată către ```http://example.org/node/123?id ```. Deci, se pare că parametrul de interogare id nu este adăugat. Dacă fac un ```dpm($id)``` în oricare dintre funcții, se afișează ca NULL - ceea ce mă face să cred că interogarea nu este capturată de la nodul original. Am omis ceva?

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.