То, что я пытаюсь сделать, не работает, я все еще перенаправлен в / node / {id}:
function hook_form_alter(&$form, $form_state, $form_id) {
$form['actions']['submit']['#submit'][] = 'callback_set_redirect';
}
function callback_set_redirect($form, FormStateInterface $form_state) {
$form_state->setRedirect('custom.landing.page');
}
8
redirection
olsav
источник
источник
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.
Ответы:
В основном код будет работать только для отправки действия, но форма сохранения узла drupal имеет много действий, я думаю, вы бы вошли в систему как администратор и попробовали бы его, а затем следуйте приведенному ниже коду.
если вы хотите, чтобы это работало и для других действий, это означает, что войдите в систему как администратор и увидите кнопку сохранения узла, у вас будет возможность выбрать «сохранить и опубликовать», «сохранить и отменить публикацию». как уже упоминалось
источник
Используя hook_form_alter, вам нужно сделать две вещи
1) Убедитесь, что это форма узла. 2) Добавьте пользовательский обработчик отправки для каждой кнопки отправки.
Затем для функции отправки вы можете использовать любую логику, какую захотите. Вы можете сравнить с NodeForm :: save, где он отправляет вас либо на страницу канонического узла, либо на первую страницу в зависимости от прав доступа текущего пользователя.
Если вы хотите изменить это поведение, чтобы оно оставалось в текущей форме узла, вы можете сделать это:
Если вы хотите использовать свою пользовательскую целевую страницу, просто замените перенаправление на код, который вы уже используете:
Обратите внимание, что это не будет переопределено при наличии параметра $ _GET «destination», например, на странице / admin / content.
Чтобы удалить параметр адресата со страницы / admin / content, вам нужно снять флажок «destination» в разделе «Content: Operations links (Operations)» в полях этих представлений.
источник
Я имел успех, используя Symfony RedirectResponse:
источник
Я не могу найти ничего плохого в исходном коде, так что, возможно, что-то еще не так. Он отлично работает для меня.
Тем не менее,
custom.landing.page
должен быть определенный маршрут и параметры (если таковые имеются) должны быть переданы следующим образом:Посмотрите FormState :: setRedirect () для деталей.
источник
Я всегда использую модуль Node Save Redirect для этой функциональности. Он добавляет опцию к типу контента, который говорит «что делать после сохранения нового контента».
источник