ใช้ hook_form_alter คุณจะต้องทำสองสิ่ง
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>');
}
}
}
หากคุณต้องการใช้หน้า Landing Page ที่กำหนดเองคุณเพียงแทนที่การเปลี่ยนเส้นทางด้วยรหัสที่คุณใช้อยู่แล้ว:
$form_state->setRedirect('custom.landing.page');
โปรดทราบว่าสิ่งนี้จะไม่แทนที่เมื่อมีพารามิเตอร์ "ปลายทาง" $ _GET เช่นที่หน้า / admin / เนื้อหา
หากต้องการลบพารามิเตอร์ปลายทางออกจากหน้า / admin / เนื้อหาคุณจะต้องยกเลิกการเลือกช่องทำเครื่องหมาย "ปลายทาง" ภายใต้ "เนื้อหา: ลิงค์การดำเนินงาน (การดำเนินการ)" ในฟิลด์มุมมองนั้น
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.