Dans l'un de mes formulaires, j'essaie de définir un $form_state['redirect']
afin que le formulaire accède à cette destination après que l'utilisateur a cliqué sur l'un des boutons d'action.
Si j'inspecte $form_state['redirect']
avant et après avoir ajouté la redirection, elle est NULL avant et après contient le tableau approprié. Voici comment je configure la redirection:
$form_state['redirect'] = array(
'my/custom/path/' . $nid,
array('query' => drupal_get_destination()),
);
Je veux conserver la destination du formulaire que l'utilisateur visualise au chemin suivant (c'est pourquoi j'appelle drupal_get_destination()
, ce qui retourne un tableau avec l' 'destination' => 'some/path/here'
intérieur.
Il semble que, comme il existe déjà une destination dans le chemin du formulaire actuel, le formulaire redirige vers cette destination, peu importe ce que je mets dans mon propre gestionnaire de soumission de formulaire (voir le code ci-dessus). J'ai même essayé d'utiliser drupal_goto () et cela n'a pas redirigé l'utilisateur non plus.
la source
Merci pour cela, mais pour une raison quelconque, cela n'a pas fonctionné lorsque je l'ai essayé. J'ai eu une erreur fatale - les données envoyées dans l'exemple de réponse ci-dessus ne répondent pas aux exigences de
drupal_goto()
C'est peut-être parce que cette réponse est plutôt ancienne, mais j'ai pu le faire fonctionner avec ceci à la place:
Je sais que cela viole cette note:
Mais, dans ce cas, vous voulez vraiment écraser la variable. Vous ne définiriez pas cette valeur à moins que vous ne vouliez ignorer les valeurs définies d'autres modules. En outre, je pense que vous devez le faire en raison de la façon dont
drupal_goto()
fonctionne le paramètre de requête. C'est peut-être aussi la raison pour laquelle la réponse originale lançait des erreurs fatales sur mon site.la source
$form_state['redirect']
, ou vous pouvez obtenir un WSOD avec des redirections concurrentes.définir le formulaire #action
la source
drupal_goto()
àhook_node_insert()
visserez les choses (parce que lesdrupal_goto()
appelsdrupal_exit()
empêchant le nouveau noeud d'être sauvé).