To, co próbuję zrobić, nie działa, nadal jestem przekierowywany do / 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
źródło
źródło
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.
Odpowiedzi:
Zasadniczo kod będzie działał tylko dla akcji wysyłania, ale formularz zapisu węzła drupal ma wiele akcji, myślę, że zalogowałbyś się jako administrator i próbowałeś go, a następnie postępuj zgodnie z poniższym kodem.
jeśli chcesz, aby działało to również w przypadku innych działań, oznacza to, że zaloguj się jako administrator i zobacz przycisk zapisz węzeł, będziesz mieć opcję „zapisz i opublikuj”, „zapisz i cofnij publikację”. jak wspomniano
źródło
Używając hook_form_alter, musisz zrobić dwie rzeczy
1) upewnij się, że jest to formularz węzła 2) dodaj niestandardową procedurę obsługi przesyłania do każdego przycisku przesyłania.
Następnie dla funkcji wysyłania możesz użyć dowolnej logiki. Możesz porównać z NodeForm :: save, gdzie wysyła cię do strony węzła kanonicznego lub do strony głównej w oparciu o uprawnienia dostępu bieżącego użytkownika.
Jeśli chcesz zmienić to zachowanie, aby pozostało w bieżącej formie węzła, możesz to zrobić:
Jeśli chcesz użyć niestandardowej strony docelowej, po prostu zastąp przekierowanie kodem, którego już używasz:
Pamiętaj, że nie zastąpi to parametru „docelowego” $ _GET, na przykład na stronie / admin / content.
Aby usunąć parametr docelowy ze strony / admin / content, usuń zaznaczenie pola wyboru „miejsce docelowe” w obszarze „Treść: Linki operacji (operacje)” w tych polach widoków.
źródło
Miałem sukces przy użyciu Symfony RedirectResponse:
źródło
Nie mogę znaleźć nic złego w oryginalnym kodzie, więc coś innego jest prawdopodobnie nie tak. Działa dla mnie dobrze.
Jednak
custom.landing.page
musi to być określona trasa, a parametry (jeśli takie istnieją) muszą zostać przekazane w następujący sposób:Aby uzyskać szczegółowe informacje, zobacz FormState :: setRedirect () .
źródło
Do tej funkcji zawsze używam modułu Node Save Redirect . Dodaje opcję do typu treści, która mówi „co robić po zapisaniu nowej treści”.
źródło