Was ich versuche zu tun, funktioniert nicht, ich werde trotzdem zu / node / {id} umgeleitet:
function hook_form_alter(&$form, $form_state, $form_id) {
$form['actions']['submit']['#submit'][] = 'callback_set_redirect';
}
function callback_set_redirect($form, FormStateInterface $form_state) {
$form_state->setRedirect('custom.landing.page');
}
8
redirection
olsav
quelle
quelle
If saving is an option, privileged users get dedicated form submit buttons to adjust the publishing status while saving in one go. @todo This adjustment makes it close to impossible for contributed modules to integrate with "the Save operation" of this form. Modules need a way to plug themselves into 1) the ::submit() step, and 2) the ::save() step, both decoupled from the pressed form button.
Antworten:
Grundsätzlich funktioniert der Code nur für die Übermittlung von Aktionen, aber das Formular zum Speichern von Drupal-Knoten enthält viele Aktionen. Ich denke, Sie hätten sich als Administrator angemeldet und es versucht. Befolgen Sie dann den folgenden Code.
Wenn Sie möchten, dass dies auch für andere Aktionen funktioniert. Dies bedeutet, dass Sie sich als Administrator anmelden und die Schaltfläche zum Speichern des Knotens sehen. Sie haben dann die Option "Speichern und veröffentlichen", "Speichern und nicht veröffentlichen". wie erwähnt
quelle
Mit hook_form_alter müssen Sie zwei Dinge tun
1) Stellen Sie sicher, dass es sich um ein Knotenformular handelt. 2) Fügen Sie jeder Senden-Schaltfläche einen benutzerdefinierten Übermittlungs-Handler hinzu.
Dann können Sie für die Submit-Funktion eine beliebige Logik verwenden. Sie können mit NodeForm :: save vergleichen, wo Sie entweder zur kanonischen Knotenseite oder zur Startseite weitergeleitet werden, basierend auf den Zugriffsberechtigungen des aktuellen Benutzers.
Wenn Sie dieses Verhalten so ändern möchten, dass es auf dem aktuellen Knotenformular bleibt, können Sie Folgendes tun:
Wenn Sie Ihre benutzerdefinierte Zielseite verwenden möchten, ersetzen Sie einfach die Weiterleitung durch den Code, den Sie bereits verwenden:
Beachten Sie, dass dies nicht überschrieben wird, wenn ein "Ziel" -Parameter $ _GET vorhanden ist, z. B. auf der Seite / admin / content.
Um den Zielparameter von der Seite / admin / content zu entfernen, deaktivieren Sie das Kontrollkästchen "Ziel" unter "Content: Operations-Links (Operationen)" in diesen Ansichtsfeldern.
quelle
Ich hatte Erfolg mit Symfony RedirectResponse:
quelle
Ich kann mit dem Originalcode nichts falsch machen, daher stimmt wahrscheinlich etwas anderes nicht. Es funktioniert gut für mich.
Es
custom.landing.page
muss jedoch eine definierte Route sein und Parameter (falls vorhanden) müssen wie folgt übergeben werden:Weitere Informationen finden Sie unter FormState :: setRedirect () .
quelle
Ich verwende für diese Funktionalität immer das Node Save Redirect- Modul. Es fügt einem Inhaltstyp eine Option hinzu, die besagt, was nach dem Speichern neuer Inhalte zu tun ist.
quelle