En utilisant hook_form_alter, vous devrez faire deux choses
1) assurez-vous qu'il s'agit d'un nœud. 2) ajoutez un gestionnaire d'envoi personnalisé à chaque bouton d'envoi.
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';
}
}
}
}
Ensuite, pour la fonction de soumission, vous pouvez utiliser la logique de votre choix. Vous pouvez comparer avec NodeForm :: save, où il vous envoie soit à la page de noeud canonique ou à la page d'accueil en fonction des autorisations d'accès de l'utilisateur actuel.
Si vous souhaitez modifier ce comportement afin qu'il reste sur la forme de nœud actuelle, vous pouvez le faire:
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>');
}
}
}
Si vous souhaitez utiliser votre page de destination personnalisée, il vous suffit de remplacer la redirection par le code que vous utilisez déjà:
$form_state->setRedirect('custom.landing.page');
Notez que cela ne remplacera pas lorsqu'il y a un paramètre "destination" $ _GET, comme sur la page / admin / content.
Pour supprimer le paramètre de destination de la page / admin / content, vous voudrez décocher la case "destination" sous "Contenu: Liens d'opérations (Opérations)" dans les champs de cette vue.
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.