Leiten Sie den Benutzer nach dem Hinzufügen / Bearbeiten des Knotens um

14

Ich möchte Benutzer auf eine benutzerdefinierte Seite umleiten, nachdem sie einen Knoten erstellt oder bearbeitet haben.

ousneo
quelle

Antworten:

6

Sie können hook_form_altereinen benutzerdefinierten Submit-Handler hinzufügen, in dem Sie den Umleitungspfad festlegen können.

Weitere Informationen zur Formularumleitung finden Sie auf der FAPI .

googletorp
quelle
1
Danke für deine Antwort ! Ich habe über die FAPI gelesen, aber noch eine Frage zu beantworten: Wo soll ich die Funktion hook_form_alter platzieren?
ousneo
2
@ousneo In Drupal 7 können Sie es in Ihr Design oder in ein benutzerdefiniertes Modul einfügen, das Sie erstellen.
googletorp
1
Bitte siehe @Dmitry Vyal Antwort
Capi Etheriel
1
Hier ist ein Modul, das nach dem Speichern eine Umleitung durchführt. drupal.org/project/node_save_redirect
polyclick
1
Diese Antwort ist zwar akzeptiert, aber zu kurz, um nützlich zu sein. Es ist wirklich wichtig, wie Sie Ihren benutzerdefinierten Submit-Handler hinzufügen, und diese Antwort schweigt sich darüber aus. Beste Antwort meiner Meinung nach ist das von @leymannx (aber siehe durch Kommentar über die Bearbeitung Anwendungsfall).
Free Radical
4

Sie können eine Regel erstellen, die den Benutzer zu jeder Seite umleitet, wenn er einen bestimmten Inhaltstyp erstellt oder bearbeitet. Wenn Sie eine Regel hinzufügen, wählen Sie "Nach dem Erstellen neuer Inhalte" und fügen Sie die Bedingung "Inhalt hat Typ" hinzu. Im Abschnitt "Ausführen" können Sie einen Benutzer auf eine beliebige Seite umleiten.

Für eine Umleitung nach dem Bearbeiten eines Knotens erstellen Sie einfach eine neue Regel und wählen als erste Option "Nach dem Aktualisieren des vorhandenen Inhalts".

kiamlaluno
quelle
Ich habe Regeln verwendet, um nach dem Erstellen eines bestimmten Inhalts umzuleiten, aber der Benutzer erhält jetzt kein Feedback. Ich möchte dem Benutzer zeigen, dass "Ihr Inhalt erstellt wurde". Wie kann ich das verbessern?
Wallace740
1
Fügen Sie nach der Umleitungsaktion eine weitere Aktion zu "Eine konfigurierbare Nachricht auf der Site anzeigen" hinzu und fügen Sie von dort aus Ihre benutzerdefinierte Nachricht hinzu.
Ich habe eine weitere Regel hinzugefügt, aber ich glaube, ich vermisse etwas in meinem benutzerdefinierten Thema, weil die Nachricht nicht auf meiner Startseite angezeigt wird. Ich verwende ein Modul "Bessere Nachrichten", um diese Art von Nachrichten in einem Popup anzuzeigen! Regel Config
wallace740
Ich habe die Erfahrung gemacht, dass Overlay die Regeln umleitet, Vorsicht.
Capi Etheriel
In meinem Fall wurde das Node-Add-Formular in ein Panel eingebettet. hook_form_alter hat es nicht verstanden. Aber Regeln haben super funktioniert!
Druvision
2

Stellen Sie dabei sicher, dass auch ein mögliches vorhandenes Ziel deaktiviert wird, das normalerweise zur URL hinzugefügt wird, wenn Sie auf die Schaltfläche Bearbeiten klicken, um einen vorhandenen Knoten zu bearbeiten.

Ersetzen Sie articlein MYMODULE_form_article_node_form_alterdurch den Computernamen Ihres Inhaltstyps.

/**
 * 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
quelle
Dies funktioniert für Umleitungen nach dem Hinzufügen eines Knotens, jedoch nicht nach dem Bearbeiten. Ich verstehe, dass die Aufrufe unsetder destinationden Bearbeitungs-Anwendungsfall behandeln sollen, aber sie haben keine Auswirkungen auf meine Drupal 7-Site.
Free Radical
@FreeRadical - Sie haben recht. Ich habe die Antwort aktualisiert, um stattdessen hook_form_BASE_FORM_ID_alter zu verwenden, das sowohl das Hinzufügen als auch das Bearbeiten zum Ziel hat.
Leymannx
1

Die Dokumentation ist nicht sehr übersichtlich, aber Sie sollten die $_GET['destination']Variable ändern , nicht $_REQUESToder $form_state['redirect'].

Dmitry Vyal
quelle
1
Das Ändern von $ form_state ['redirect'] funktioniert gut in Drupal 7 ...
Felix Eve
1

In Drupal 7 können Sie das Knotenbearbeitungsformular ändern, um Ihre eigene Übermittlungsfunktion anzuhängen. In diesem Formular können Sie form_state des Knotenlöschbestätigungsformulars so ändern, dass der Parameter 'destination' enthalten ist. Wir haben uns als Unterthema des "Sieben" -Admin-Themas entwickelt ...

Dokumentation für hook_form_FORM_ID_alter

Sie können diesen Hook einer Vorlage / einem Thema hinzufügen, nicht nur Modulen.

Fügen Sie in Ihrem template.phpDesign das folgende Formular hinzu:

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

und dann voila. wird nach dem Löschen eines Knotens nicht mehr auf die Homepage umgeleitet.

kris
quelle