Super le nouvel article avec un sondage lité est bouclé, il ne reste plus qu’à créer ce sondage. Purée qu’est ce que c’est coûteux en clics d’aller ensuite sur cette page de création de sondages… J’aimerais bien que mon équipe de production fasse en sorte que je sois redirigé directement vers la création de sondage après avoir créé mes articles.
Vos désirs sont des ordres ! Petit tour de magie très simple pour accomplir une telle action.
Dans un premier temps il nous faut ajouter une fonction de traitement à la soumission du formulaire de création de node.
/** * Implementation of hook_form_alter(). * Ajouter une fonction qui redirige l'utilisateur automatiquement * vers le formulaire de création de contenu d'un autre type mon utilisateur */ function MONMODULE_form_alter(&$form, &$form_state, $form_id) { // Ajouter notre fonction si le formulaire est un formulaire // de création de noeud et si le type de contenu créé est un article if ($form["#id"] == 'node-form' && $form["type"]["#value"] == "story") { $form["#submit"][] = 'MONMODULE_create_submit'; } }
Notre fonction est créée, il ne reste plus qu’à lui faire faire la redirection.
/** * Rediriger vers le formulaire de création de sondages */ function MONMODULE_create_submit($form, &$form_state) { $_REQUEST['destination'] = 'node/add/webform'; }
Et le tour est joué ! C’est aussi simple que ça.
Un peu d’explications, pour faire une redirection depuis un formulaire il existe plusieurs méthodes.
drupal_goto()
Cette fonction permet de faire des redirection depuis Drupal vers des URLs interne ou externe et en passant une série de paramètres. Le seule détail qui fâche c’est que drupal_goto() stoppe complètement l’exécution du script en effectuant la redirection. Si un traitement devait se faire après l’exécution de votre fonction vous pouvez faire une croix dessus.
$form['#redirect']
Cette méthode permet d’ajouter une redirection après le traitement du formulaire, cette technique peut être utilisée à la création du formulaire ou depuis un hook_form_alter(). Si vous ne pouvez travailler que dans une fonction supplémentaire au moment de la soumission du formulaire cette technique ne peut être employée.
$form_state['redirect']
Cette fois si vous ne pouvez travailler que dans une fonction supplémentaire à la soumission du formulaire cette technique fonctionne, vous écrasez la valeur définie dans $form['#redirect'] pour renvoyer l’utilisateur là où vous l’avez décidez à la fin du traitement de votre fonction. Cette technique ne fonctionne en revanche pas lorsque le formulaire que vous modifiez est le formulaire de création de noeud.
$_REQUEST['destination']
Pourquoi devoir employer cette méthode ? Il faut savoir qu’à la création d’un noeud la dernière fonction appelée est toujours node_form_submit(). Cette fonction fixe la valeur de $form_state['redirect'] à node/NID pour rediriger l’utilisateur vers le noeud qui vient d’être créé. La seule façon propre de détourner cette action est donc de recourir à $_REQUEST qui est l’unique option de passer outre les valeurs définies dans $form et $form_state.


Cela est sans aucun doute possible avec les déclencheurs et les actions sans une ligne de code.
[...] Ce billet était mentionné sur Twitter par Julien Dubreuil, Julien Dubois. Julien Dubois a dit: [Drupal Blog] Rediriger un utilisateur après avoir créé un noeud: Super le nouvel article avec un sondage lité est… http://bit.ly/aTKk4f [...]
Oui tout à fait et sûrement avec Rules également.
Merci pour ce billet
.
Sur un formulaire qui ne fait que envoyé des paramètre à une view j’ai testé $form_alter['redirect'] dans la fonction de submit mais sans succès.
La solution qui fonctionne pour moi est d’utiliser $form_state['redirect'].
Exact Gagarine, il y a une erreur dans le billet, c’est corrigé. Il s’agit bien de $form_state['redirect'] et non de form_alter (qui n’existe pas)