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.
function mymodule_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if (isset($form['#entity_type']) && $form['#entity_type'] == 'node') {
foreach (array_keys($form['actions']) as $action) {
if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
$form['actions'][$action]['#submit'][] = 'mymodule_node_form_submit';
}
}
}
}
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:
function mymodule_node_form_submit($form, FormStateInterface $form_state) {
$node = $form_state->getFormObject()->getEntity();
if ($node->id()) {
if ($node->access('edit')) {
$form_state->setRedirect(
'entity.node.edit_form',
['node' => $node->id()]
);
}
else {
$form_state->setRedirect('<front>');
}
}
}
Wenn Sie Ihre benutzerdefinierte Zielseite verwenden möchten, ersetzen Sie einfach die Weiterleitung durch den Code, den Sie bereits verwenden:
$form_state->setRedirect('custom.landing.page');
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.
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.