Використовуючи гачку_форму_алтер, вам потрібно буде зробити дві речі
1) переконайтеся, що це форма вузла 2) додайте користувальницький обробник подання до кожної кнопки подання.
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';
}
}
}
}
Тоді для функції подання ви можете використовувати будь-яку логіку, яку ви хочете. Ви можете порівняти з NodeForm :: save, де він надсилає вас або на сторінку канонічного вузла, або на головну сторінку, виходячи з поточних прав доступу користувача.
Якщо ви хотіли змінити цю поведінку, щоб вона залишалася у поточній формі вузла, ви можете зробити це:
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>');
}
}
}
Якщо ви хочете скористатися власною цільовою сторінкою, ви просто заміните переспрямування кодом, який ви вже використовуєте:
$form_state->setRedirect('custom.landing.page');
Зауважте, що це не буде замінено, якщо є параметр $ _GET "призначення", наприклад, на сторінці / admin / content.
Щоб видалити параметр призначення зі сторінки / admin / content, вам потрібно зняти прапорець "призначення" у розділі "Зміст: Посилання операцій (Операції)" у цих полях перегляду.
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.