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>');
}
}
}
맞춤 방문 페이지를 사용하려면 리디렉션을 이미 사용중인 코드로 바꿉니다.
$form_state->setRedirect('custom.landing.page');
/ admin / content 페이지와 같이 "목적지"$ _GET 매개 변수가있는 경우 이는 재정의되지 않습니다.
/ 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.