web-dev-qa-db-fra.com

Comment rediriger l'utilisateur vers la page précédente après l'envoi du formulaire?

Je peux rediriger l'utilisateur après avoir ajouté un nœud à une autre page, mais je voudrais le rediriger vers la page précédente à partir de laquelle il a été lié. J'utilise maintenant le code suivant:

function user_add_node_form_foto_node_form_alter(&$form, &$form_state, $form_id) {
  $form['actions']['submit']['#submit'][] = 'user_add_node_foto_node_form_submit'; 
}

function user_add_node_foto_node_form_submit($form, &$form_state) {
  $form_state['redirect'] = 'node/add/foto';
}

Comment puis-je changer un code pour rediriger les utilisateurs vers la page précédente après avoir soumis le formulaire?

EDIT : Chaque type de nœud photo a un champ de référence de nœud "field_relate_to_gallery". En utilisant cela, j'ai créé une galerie dans les vues et ajouté un lien "Ajouter une photo dans la galerie" sur la page de la galerie reliant pour ajouter un formulaire de nœud. Je voudrais retourner les utilisateurs à la galerie après avoir ajouté un nœud "foto". Cela signifie que plusieurs galeries ont un identifiant différent et ne peuvent pas rediriger ce formulaire uniquement vers une galerie particulière.

Ma solution Si quelqu'un est intéressé. Je l'ai fait en utilisant la référence de nœud du module url. Maintenant, mon utilisateur peut ajouter une image de la page de la galerie (il y a un lien pour ajouter un formulaire de nœud) et après l'avoir soumise, il revient à la page de la galerie.

4
moto

Vous voulez drupal_get_destination() . Cette fonction crée un paramètre de requête "destination" utilisable dans l() qui redirige l'utilisateur vers la page d'où il provient après avoir soumis le formulaire. Ainsi, lorsque vous créez votre lien pour ajouter un nouveau nœud, utilisez la fonction l() avec drupal_get_destination(). Par exemple...

l('Add new foto', 'path/to/add/a/foto', array('query' => drupal_get_destination()))

Ça devrait le faire.

7
Chaulky

il y a 2 possibilités:

  1. utilisez $ _SERVER ['HTTP_REFERER']
  2. ajoutez quelque chose à l'url de la page actuelle (comme un "from = XYZ") et utilisez-le.

N'oubliez pas que certains navigateurs ne définissent pas $ _SERVER ['HTTP_REFERER'] et si un utilisateur accède directement à la page, aucun en-tête de référent ne sera présent. Assurez-vous donc d'avoir une solution de rechange en place, comme ne pas afficher le lien arrière, ou un lien vers une page de démarrage par défaut ou autre chose.

2
ZioBudda

J'espère que cela vous donnera une idée de la façon dont vous pouvez y parvenir, (enregistrez l'URL précédente quelque part (variable, session, variable statique, etc.) et dans la fonction de soumission, redirigez-la vers elle.

 function user_add_node_form_foto_node_form_alter(&$form, &$form_state, $form_id) {
    global $user;
    variable_set('perUrl'.$user->uid,$_SERVER['HTTP_REFERER']);
    $form['actions']['submit']['#submit'][] = 'user_add_node_foto_node_form_submit'; 

    }
function user_add_node_foto_node_form_submit($form, &$form_state) {
global $user;
$form_state['rebuild'] = TRUE;
$form_state['redirect'] = variable_get('perUrl'.$user->uid);
}
0
Yusef