Jump to content

[Résolue]Override pas tout compris ?


Recommended Posts

Bonjour,

 

Je voulais faire quelque chose qui me semblais simple :P je l'avais fait sans trop de problème avec la 1.4 avec l'override, mais là avec la 1.5 je n'y arrive plus..

 

Mon souhait est que quand une personne est sur la page d'authentification (qui doit choisir si il doit s'inscrire ou s'authentifier), même si il n'a pas entré d'adresse email dans la case "Adresse email", que si il appui sur le bouton "Créez votre compte", qu'il soit tout de même dirigé vers la page d'inscription (c'est peut être ridicule, mais j'ai remarqué que le taux était un peu plus élevé).

 

Donc je vais dans /override/controllers/front/AuthController.php

 

et je créé la fonction suivante

 

protected function processSubmitCreate()
{
 //POUR EVITER D ENTRER OBLIGATOIREMENT EMAIL A ETAPE 1
 $this->create_account = true;
 $this->context->smarty->assign('email_create', Tools::safeOutput($email));
 $_POST['email'] = $email;
}

 

il faut savoir que dans la fonction d'origine, voilà ce qu'il y a

 

protected function processSubmitCreate()
{
 if (!Validate::isEmail($email = Tools::getValue('email_create')) || empty($email))
  $this->errors[] = Tools::displayError('Invalid e-mail address');
 elseif (Customer::customerExists($email))
 {
  $this->errors[] = Tools::displayError('An account is already registered with this e-mail, please enter your password or request a new one.', false);
  $_POST['email'] = $_POST['email_create'];
  unset($_POST['email_create']);
 }
 else
 {
  $this->create_account = true;
  $this->context->smarty->assign('email_create', Tools::safeOutput($email));
  $_POST['email'] = $email;
 }
}

 

Mais j'ai un message d'erreur

 

TECHNICAL ERROR: unable to load form.

Details:
Error thrown: [object Object]
Text status: parsererror

 

même si je met une adresse email valide, j'ai le même message d'erreur...

 

Je ne comprend pas pourquoi cela ne fonctionne pas... puisque je retire les vérifications et que je valide directement l'email?

 

Merci!

 

Raphael

Edited by Raph59 (see edit history)
Link to comment
Share on other sites

En fait tu ne valides rien du tout puisque tu fais un return , d'une part , qui n'est pas nécessaire, et que d'autre part tu assignes une chaine vide à la donnée POST 'email' :

 

 

return $_POST['email'] = $email;

 

A ce stade $email est vide puisque tu as supprimé purement et simplement ce qui renseignait $email .

Link to comment
Share on other sites

Merci de ta réponse,

 

Oula désolé le return était là en trop ... j'avais essayé car j'était désespéré :P

 

Je viens d'éditer le message pour mettre vraiment ce que je met..

 

Mais en écrivant le message je viens de me rendre compte pourquoi ca ne fonctionne pas...

 

je n'avais pas fait attention que dans les conditions on renseignais la variable $email

 

je commence a être fatigué et je commence à manquer de patience je pense... je vais allez dodo et continuer demain :P

 

Merci de ta réponse

Link to comment
Share on other sites

Bon sinon je confirmes en effet cela fonctionne beaucoup mieux maintenant :P

 

Une question, quelqu'un sais si il y a une variable global par exemple qui contient l'id_shop en cours?

 

Pour par exemple si on souhaite qu'une modification en override soit effectué seulement sur la boutique avec l'id_shop == 1

 

Merci :)

Link to comment
Share on other sites

bon je vais développer un tout petit peu plus quand même :

Les tests que tu veux occulter permettent d'une part de vérifier si l'adresse mail existe avant d'essayer de la créer.

L'adresse mail est une clé unique dans la table ps_customers ...

De plus , sur la 1.5 , les formulaire chargé est chargé en ajax et l'adresse mail est bien sûr attendue dans ces données , donc tu ne peux te satisfaire de cette override , et tu devra aller plus loin , ne serait-ce que modifier le javascript qui récupère et affiche ces données, ou au pire les données elles mêmes .

 

Supposons que tu y parviennes : alors le client devra finalement entrer son adresse mail dans le formulaire complet , qui retournera les mêmes erreurs lui, s'il entre une mauvaise adresse ou une adresse existante , sauf que cette fois le client aura rempli un formulaire complet pour arriver au même résultat.

 

Le jeu en vaut-il la chandelle ?

Link to comment
Share on other sites

Bonjour Broceliande,

 

Je te remercie d'avoir développé ainsi ainsi que ta mise en garde :)

 

Pour ne pas prendre de risque, voici ce que j'ai fait finalement

 

protected function processSubmitCreate()
{
 if (!Validate::isEmail($email = Tools::getValue('email_create')) || empty($email))
 {
  $this->create_account = true;
  $this->context->smarty->assign('email_create', '');
  $_POST['email'] = '';
 }
 elseif (Customer::customerExists($email))
 {
  $this->errors[] = Tools::displayError('An account is already registered with this e-mail, please enter your password or request a new one.', false);
  $_POST['email'] = $_POST['email_create'];
  unset($_POST['email_create']);
 }
 else
 {
  $this->create_account = true;
  $this->context->smarty->assign('email_create', Tools::safeOutput($email));
  $_POST['email'] = $email;
 }
}

 

Encore merci :)

Link to comment
Share on other sites

Bon sinon je confirmes en effet cela fonctionne beaucoup mieux maintenant :P

 

Une question, quelqu'un sais si il y a une variable global par exemple qui contient l'id_shop en cours?

 

Pour par exemple si on souhaite qu'une modification en override soit effectué seulement sur la boutique avec l'id_shop == 1

 

Merci :)

 

la par contre pour une autre application bien sur mais tu dois avoir ça dans le contexte :

 

$this->context->shop->id

 

un truc comme ça ...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...