Reindirizzare l'utente dopo l'aggiunta / modifica del nodo


13

Voglio reindirizzare gli utenti a una pagina personalizzata, dopo aver creato un nodo o averlo modificato.

Risposte:


6

È possibile utilizzare hook_form_alterper aggiungere un gestore di invio personalizzato in cui è possibile impostare il percorso di reindirizzamento.

Consulta la FAPI per maggiori dettagli sul reindirizzamento dei moduli.


1
Grazie per la tua risposta ! ho letto della FAPI ma ho ancora delle domande da fare: dove devo inserire la funzione hook_form_alter?
ousneo,

2
@ousneo In drupal 7 puoi inserirlo nel tuo tema o in un modulo personalizzato che crei.
googletorp

1
si prega di vedere la risposta di @Dmitry Vyal
Capi Etheriel,

1
Ecco un modulo che esegue un reindirizzamento dopo il salvataggio. drupal.org/project/node_save_redirect
polyclick

1
Se accettata, questa risposta è troppo breve per essere utile. È davvero importante il modo in cui aggiungi il gestore di invio personalizzato e questa risposta è silenziosa. La migliore risposta IMHO è quella di @leymannx (ma vedi per commento sul caso d'uso modifica).
Radicale gratuito

4

È possibile creare una regola che reindirizza l'utente a qualsiasi pagina quando crea o modifica un tipo di contenuto specifico. Quando aggiungi una regola seleziona "Dopo aver creato il nuovo contenuto" aggiungi anche una condizione di "Il contenuto ha il tipo". La sezione Fai ti darà la possibilità di reindirizzare un utente a qualsiasi pagina desideri.

Per un reindirizzamento dopo aver modificato un nodo, basta creare una nuova regola e selezionare "Dopo l'aggiornamento del contenuto esistente" come prima opzione.


Ho usato le regole per reindirizzare dopo aver creato un contenuto specifico, ma l'utente non riceve alcun feedback ora. Voglio mostrare all'utente che "Il tuo contenuto è stato creato". Come posso migliorare questo?
wallace740,

1
Aggiungi un'altra azione dopo l'azione di reindirizzamento a "Mostra un messaggio configurabile sul sito" e aggiungi il tuo messaggio personalizzato da lì.

Ho aggiunto un'altra regola, ma penso che mi manca qualcosa nel mio tema personalizzato perché il messaggio non è mostrato sulla mia prima pagina. Sto usando un modulo "Messaggi migliori" per mostrare questo tipo di messaggi in un popup! rule config
wallace740,

La mia esperienza è che l'overlay infrange le regole di reindirizzamento, attenzione.
Capi Etheriel,

Nel mio caso, il modulo di aggiunta nodo è stato incorporato all'interno di un pannello. hook_form_alter non l'ha rilevato. Ma le regole hanno funzionato alla grande!
Druvision,

2

Nel fare ciò, assicurati anche di deselezionare una possibile destinazione esistente che normalmente viene aggiunta all'URL quando fai clic sul pulsante Modifica per modificare un nodo esistente.

Sostituire articlein MYMODULE_form_article_node_form_altercon il nome della macchina del tipo di contenuto.

/**
 * 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';
}

Funziona per i reindirizzamenti dopo aver aggiunto un nodo, ma non dopo averlo modificato. Capisco che le chiamate verso unsetil destinationsi suppone per gestire il caso di modifica uso, ma non hanno alcun effetto sul mio sito Drupal 7.
Radicale gratuito

@FreeRadical - Hai ragione. Ho aggiornato la risposta per utilizzare hook_form_BASE_FORM_ID_alter , che ha come target entrambi: aggiungi e modifica.
leymannx,


1

La documentazione non è molto chiara su di essa, ma è necessario modificare la $_GET['destination']variabile, no $_REQUESTo $form_state['redirect'].


1
La modifica di $ form_state ['redirect'] funziona correttamente in Drupal 7 ...
Felix Eve,

1

in Drupal 7 puoi modificare il modulo di modifica del nodo per "allegare" la tua funzione di invio, in cui puoi modificare form_state del modulo di conferma dell'eliminazione del nodo per includere il parametro "destinazione" ... ho appena fatto questo in un tema personalizzato i " si è sviluppato come un sottotema del tema "sette" dell'amministratore ...

Documentazione per hook_form_FORM_ID_alter

È possibile aggiungere questo hook a un modello / tema, non solo ai moduli.

quindi nel tuo tema template.php, aggiungi questo modulo alter hook:

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

e poi voilà. non reindirizzato più alla homepage dopo l'eliminazione di un nodo.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.