Przekieruj użytkownika po dodaniu / edycji węzła

13

Chcę przekierować użytkowników na niestandardową stronę po utworzeniu lub edycji węzła.

ousneo
źródło

Odpowiedzi:

6

Możesz użyć, hook_form_alteraby dodać niestandardową procedurę obsługi przesyłania, w której możesz ustawić ścieżkę przekierowania.

Zobacz FAPI, aby uzyskać więcej informacji na temat przekierowania formularza.

googletorp
źródło
1
Dziękuję za odpowiedź ! Czytałem o FAPI, ale wciąż mam pytanie: gdzie powinienem umieścić funkcję hook_form_alter?
ousneo
2
@ousneo W drupal 7 możesz umieścić go w swoim motywie lub w niestandardowym module, który tworzysz.
googletorp
1
proszę zobaczyć odpowiedź @Dmitry Vyal
Capi Etheriel
1
Oto moduł, który dokonuje przekierowania po zapisaniu. drupal.org/project/node_save_redirect
kliknięcie
1
Po zaakceptowaniu ta odpowiedź jest zbyt krótka, aby była przydatna. Naprawdę ważne jest, jak dodasz niestandardową procedurę obsługi przesyłania, a ta odpowiedź milczy na ten temat. Najlepsza odpowiedź IMHO brzmi: @leymannx (ale zobacz komentarz dotyczący przypadku użycia edycji).
Bezpłatne radykalne
4

Możesz utworzyć regułę, która przekieruje użytkownika na dowolną stronę podczas tworzenia lub edycji określonego typu treści. Po dodaniu reguły wybierz „Po utworzeniu nowej treści” dodaj również warunek „Zawartość ma typ”. W sekcji Do You możesz przekierować użytkownika na dowolną stronę.

Aby przekierować po edycji węzła, po prostu utwórz nową regułę i wybierz „Po zaktualizowaniu istniejącej zawartości” jako pierwszą opcję.

kiamlaluno
źródło
Użyłem Reguł, aby przekierować po utworzeniu określonej treści, ale użytkownik nie otrzymuje teraz żadnej opinii. Chcę pokazać użytkownikowi, że „Twoja treść została utworzona”. Jak mogę to poprawić?
wallace740,
1
Dodaj kolejną akcję po akcji przekierowującej do „Pokaż konfigurowalną wiadomość w witrynie” i stamtąd dodaj niestandardową wiadomość.
Dodałem kolejną regułę, ale myślę, że coś mi brakuje w niestandardowym motywie, ponieważ komunikat nie jest wyświetlany na mojej stronie głównej. Korzystam z modułu „Lepsze wiadomości”, aby wyświetlać tego rodzaju wiadomości w wyskakującym okienku! config config
wallace740 27.04 .12
Z mojego doświadczenia wynika, że ​​nakładka łamie zasady przekierowywania, strzeż się.
Capi Etheriel
W moim przypadku ten formularz dodawania węzła został osadzony w środku panelu. hook_form_alter nie złapał tego. Ale zasady działały świetnie!
Druvision
2

Robiąc to, upewnij się również, aby usunąć zaznaczenie możliwego istniejącego miejsca docelowego, które normalnie jest dodawane do adresu URL po kliknięciu przycisku edycji, aby edytować istniejący węzeł.

Zamień articlena MYMODULE_form_article_node_form_alternazwę komputera typu zawartości.

/**
 * Implements hook_form_BASE_FORM_ID_alter().
 */
function MYMODULE_form_article_node_form_alter(&$form, &$form_state, $form_id) {

  $form['actions']['submit']['#submit'][] = '_MYMODULE_node_form_redirect';
}

/**
 * Submit callback.
 */
function _MYMODULE_node_form_redirect($form, &$form_state) {

  // Unset destination first.
  unset($_GET['destination']);
  unset($_REQUEST['edit']['destination']);

  $form_state['redirect'] = 'FOO/BAR';
}
leymannx
źródło
Działa to w przypadku przekierowań po dodaniu węzła, ale nie po jego edycji. Rozumiem, że rozmowy do ma obsługiwać sprawy edit używać, ale nie mają one wpływu na moją Drupal 7 miejscu. unsetdestination
Bezpłatne radykalne
@FreeRadical - Masz rację. Zaktualizowałem odpowiedź, aby zamiast tego użyć hook_form_BASE_FORM_ID_alter , który jest przeznaczony zarówno do dodawania, jak i edycji.
leymannx
@FreeRadical - Informacje dodatkowe: Różnica między tworzeniem nowego i edytowania węzła w formie zmiany .
leymannx
1

Dokumentacja nie jest zbyt jasna, ale powinieneś zmodyfikować $_GET['destination']zmienną, nie $_REQUESTlub $form_state['redirect'].

Dmitry Vyal
źródło
1
Modyfikacja $ form_state [„przekierowanie”] działa dobrze w Drupal 7 ...
Felix Eve
1

w Drupal 7 możesz zmienić formularz edycji węzła, aby „dołączyć” własną funkcję wysyłania, w której możesz zmienić stan formularza formularza potwierdzenia usunięcia węzła, aby uwzględnić parametr „docelowy”… właśnie to zrobiłem w niestandardowym motywie i ” rozwijam się jako podtemat motywu administracyjnego „siedem” ...

Dokumentacja dla hook_form_FORM_ID_alter

Możesz dodać ten haczyk do szablonu / motywu, nie tylko do modułów.

więc w swoim motywie template.phpdodaj ten formularz alter hook:

function yourtheme_node_delete_form_submit( &$form, &$form_state ) {
    $form_state[ 'redirect' ][ 1 ][ 'query' ][ 'destination' ] = "admin/content";
}

a potem, voila. nie jest już przekierowywany na stronę główną po usunięciu węzła.

kris
źródło