Submitted by selinav on
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
Hello je suis pas calé sur
Permalien Soumis par nyl auster le 16 Septembre, 2009 - 22:46
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é
Permalien Soumis par selinav le 17 Septembre, 2009 - 16:09
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
Permalien Soumis par selinav le 17 Septembre, 2009 - 16:17
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
Permalien Soumis par nyl auster le 17 Septembre, 2009 - 22:23
Hello
bon dans la théorie le code serait ça (pour la connexion sur le formulaire du bloc de connexion)
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
Permalien Soumis par nyl auster le 17 Septembre, 2009 - 22:38
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 :
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
Permalien Soumis par selinav le 18 Septembre, 2009 - 08:57
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
oui mais $form['#redirect']
Permalien Soumis par nyl auster le 18 Septembre, 2009 - 11:08
oui mais $form['#redirect'] existe toujours sur drupal 6 et il override l'autre si besoin.
bon, le problème vient de
Permalien Soumis par selinav le 22 Septembre, 2009 - 14:11
bon, le problème vient de ubercart, il faut patcher le module cart, i18n n'est pas en cause
http://drupal.org/node/584328
Même si ca fait longtemps, et
Permalien Soumis par badgones le 23 Février, 2010 - 09:46
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)