[Resolu]hook redirection formulaire utilisateur

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

je fais suite au message de aurelienOoO http://drupalfr.org/node/7936
concernant le problème de préfix lors de la connexion à la page utilisateur.

Rencontrant le même problème, je tente de faire un module.
Etant débutante, j'aurais besoin d'aide.

Je tente de faire un hook sur le formulaire de connexion utilisateur puis de réaffecter un chemin. Voici ce que j'ai fais, qui ne fonctionne pas :-(

<?php

function customuser_form_FORM_ID_alter(&$form, &$form_state) {
 
$form['user-login-form']=array(
   
'#submit' => array('customuser_login_submit'),
    );
}

function customuser_login_submit($form, &$form_state) {
  global
$user;
  if (
$user->uid) {
     if(
$form_state['redirect'] = 'en/en/user/'. $user->uid) {
   
$form_state['redirect'] = 'en/user/'. $user->uid;
    return;
      }
     if(
$form_state['redirect'] = 'fr/fr/user/'. $user->uid) {
   
$form_state['redirect'] = 'fr/user/'. $user->uid;
    return;
      }
  }
}

?>

Après moult réflexion, je me dis qu'il faut surement faire un hook sur le module qui s'occupe de créer les préfixes : i18n ou locale?

Pourriez-vous m'éclairez SVP.

Merci

Forum : 
Version de Drupal : 

Hello
je suis pas calé sur le sujet mais a priori si ça n'a pas marché avec le module de redirection ou avec rules c'est que le probleme doit être un peu plus complexe que ça. As tu regardé dans les issues du projet si quelqu'un avait déjà rencontré ce souci ? vous ne devez pas être les seuls.

(PS il me semble que ton code est incorrect si tu as vraiment laissé FORM_ID tel quel, ça devrait être quelque chose comme user_register ou user_login à la place. Ensuite seul le premier hook peut suffire je pense, mais je testerai plutôt avec $form['#redirect'] = 'oùjeveux' car #redirect doit overrider le $form_state['redirect'] il me semble. Mais je n'ai pas le livre pour vérifier :-/ )

effectivement j'ai regardé sur drupal.org certains ont le soucis mais pas de solution.
Moi aussi j'ai investi dans le livre Pro Drupal Development mais je n'en suis qu'au chapitre 6 et je n'ai pas encore tous les automatismes de fonctionnement de drupal.

Quand tu parles du module de redirection cela signifie que si je rajoute un alias pour en/en/user en en/user ça pourrait fonctionner?

Je n'ai pas testé rules.

Pour le user_login, j'ai hésité entre les 2 car dans le module user c'est écrit d'une façon et quand le form s'affiche il n'a pas tout à fait le même nom.

Je vais tester avec $form[#redirect].

Et avec http://api.drupal.org/api/function/drupal_redirect_form/6 ça ne fonctionnerait pas?

Je te tiens au courant.

merci

j'ai essayé ceci http://drupal.org/node/134000 et ça ne fonctionne pas.
$form_id correspond-t-il bien à l'id donnée au formulaire dans le html?

<?php
function customuser_form_alter(&$form, $form_state, $form_id) {
  switch (
$form_id) {
    case
'user-login':
       
$form['#redirect'] = 'user';
      break;
  }
}

?>

Hello
bon dans la théorie le code serait ça (pour la connexion sur le formulaire du bloc de connexion)

<?php
function tonmodule_form_user_login_block_alter(&$form, &$form_state){
 
$form['#redirect'] = 'node/28';
}
?>

redirect est bien censé overrider les $form_state['redirect'] utilisées dans les fonctions submit. pour une raison que j'ignore, cela ne fonctionne pas avec le formulaire de connexion. Je vais creuser ça car je ne comprends pas pourquoi ça ne marcherait pas uniquement avec ce formulaire :-/

En attendant tu peux tout aussi bien tester avec un module genre loggin tobogan qui te fera une redirection en bonne et due forme lui aussi.
Mais comme je disais plus haut le probleme est peut être plus complexe que cele et intrinsèque à i18n...

EDIT : après avoir fait un tour dans le code du module user j'ai testé ça pour le bloc de connexion et ça fonctionne pour une redirection classique. Tu dois indiqué la destination après le paramètre destination ci-dessous :

<?php
function tonmodule_form_user_login_block_alter(&$form, &$form_state){
 
$form['#action'] = url($_GET['q'], array('query' => 'destination=node/28'));
}
?>

Si ce code ne marche pas avec ce code, c'est que le probleme vient d'i18n parce que sans, ça marche très bien.

merci

mais je n'ai pas de bloc de connexion. Uniquement un lien qui pointe vers la page fr/user ou en/user où l'on remplit le formulaire dans le contenu de la page.

Je vais voir les issues côté i18n.

En ce qui concerne $form_state['redirect'] c'est le code pour drupal 6 qui remplace $form['#redirect'] en drupal 5

Même si ca fait longtemps, et que ma réponse te sera surement inutile, je pense que le fait que ca ne marche pas n'implique qu'une erreur de programmation :

if($form_state['redirect'] = 'en/en/user/'. $user->uid)

ba ca... c'est toujours vrai... met un "==" et à mon avis ça marchera beaucoup mieux :)
Pareil pour if($form_state['redirect'] = 'fr/fr/user/'. $user->uid)