Jump to content

[RESOLU] Changement de mode d'identification en FO


Recommended Posts

Bonjour.

Je m'explique...

Ayant deux magasin réels dans le 56, je désirerai que mes clients existant se log par leur nom (à la place de leur émail), et par leur n° de client interne à mes boutiques (à la place du password).

1 -J'ai crée un client exemple donc son nom est dupont et son n° de client est clt01.

2 - Je voudrais rendre le champ email non obligatoire.

Mon vrai problème c'est quoi changé dans authentification et mon compte pour faire passé la vérification de l'email au nom.
Le numéro de client est enregistré dans le champs password (je n'ai qu'a changer la traduction de "mot de passe" à "numéro de client").

J'ai essayé de changer dans authentification.tpl la vérif par email par lastname

       <form action="{$base_dir_ssl}authentication.php" method="post" id="login_form" class="std">

{l s='Already registered ?'}


{l s='Votre nom'}
<input type="text" id="lastname" name="lastname" value="{if isset($smarty.post.lastname)}{$smarty.post.lastname|escape:'htmlall'|stripslashes}{/if}" class="account_input" /></span>



{l s='Password'}
<input type="password" id="passwd" name="passwd" value="{if isset($smarty.post.passwd)}{$smarty.post.passwd|escape:'htmlall'|stripslashes}{/if}" class="account_input" /></span>



                   {if isset($back)}<input type="hidden" class="hidden" name="back" value="{$back|escape:'htmlall':'UTF-8'}" />{/if}
                   <input type="submit" id="SubmitLogin" name="SubmitLogin" class="button" value="{l s='Log in'}" />


{l s='Forgot your password?'}

       </form>



ca donne http://vladis.fr/authentication.php?back=my-account.php

dans authentification.php j'ai changé

if (Tools::isSubmit('SubmitLogin'))
{
   $passwd = trim(Tools::getValue('passwd'));
   $lastname = trim(Tools::getValue('lastname'));
   if (empty($lastname))
       $errors[] = Tools::displayError('Votre nom est requis !');
   elseif (!Validate::isEmail($lastname))
       $errors[] = Tools::displayError('Votre nom est inconnu !');
   elseif (empty($passwd))
       $errors[] = Tools::displayError('Votre n° de client est requis !');
   elseif (Tools::strlen($passwd) > 32)
       $errors[] = Tools::displayError('Votre n° de client est trop long !');
   elseif (!Validate::isPasswd($passwd))
       $errors[] = Tools::displayError('n° de client inconnu !');
   else



Mais je ne doit pas aller assez loin....

J'obtiens


Il y a 1 erreur :

1. Votre nom est inconnu !


Si je change
  elseif (!Validate::isEmail($lastname))


par

  elseif (!Validate::isLastname($lastname))



comme ceci

if (Tools::isSubmit('SubmitLogin'))
{
   $passwd = trim(Tools::getValue('passwd'));
   $lastname = trim(Tools::getValue('lastname'));
   if (empty($lastname))
       $errors[] = Tools::displayError('Votre nom est requis !');
   elseif (!Validate::isLastname($lastname))
       $errors[] = Tools::displayError('Votre nom est inconnu !');
   elseif (empty($passwd))
       $errors[] = Tools::displayError('Votre n° de client est requis !');
   elseif (Tools::strlen($passwd) > 32)
       $errors[] = Tools::displayError('Votre n° de client est trop long !');
   elseif (!Validate::isPasswd($passwd))
       $errors[] = Tools::displayError('n° de client inconnu !');
   else



J'ai une page blanche...

Suis-je sur la bonne voie.

Doit on changer quelque chose dans smarty, j'ose pas trop toucher...

Toutes les idées sont bonnes à prendre

Merci d'avance


[EDIT] Je ne rien toucher à la création du compte, juste à l'authentification, car j'ai un portefeuille de plus de 1000 clts et je veux créer pour eux leur compte sous prestashop, pour qu'ils n'aient pas a le faire (enlever la barrière de création pour les anciens clients)

[EDIT] Première erreur c'est lastname et pas firstname CORRIGE

Link to comment
Share on other sites

Fichier: classes/customer.php
Ligne: 179
Ajouter

   /**
     * Return customer instance from its lastname (optionnaly check password)
     *
     * @param string $lastname lastname
     * @param string $passwd Password is also checked if specified
     * @return Customer instance
     */
   public function getByLastname($lastname, $passwd = NULL)
   {
        if (!Validate::isName($lastname) OR ($passwd AND !Validate::isPasswd($passwd)))
            die (Tools::displayError());

       $result = Db::getInstance()->GetRow('
       SELECT *
       FROM `'._DB_PREFIX_    .'customer`
       WHERE `active` = 1
       AND `lastname` = \''.pSQL($lastname).'\''.(isset($passwd) ? 'AND `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\'
       AND `deleted` = 0' : ''));

       if (!$result)
           return false;
       $this->id = $result['id_customer'];
       foreach ($result AS $key => $value)
           if (key_exists($key, $this))
               $this->{$key} = $value;

       return $this;
   }



Fichier: authentication.php
Ligne: 121 à 125
Remplacer par

$lastname = trim(Tools::getValue('lastname'));
if (empty($lastname))
 $errors[] = Tools::displayError('lastname is required');
elseif (!Validate::isName($lastname))
 $errors[] = Tools::displayError('invalid lastname');



Fichier: authentication.php
Ligne: 135
Remplacer par

$authentication = $customer->getByLastname(trim($lastname), trim($passwd));



Fichier: themes/prestashop/authentifiaction.tpl
Ligne: 54 à 55
Remplacer par

{l s='Last name'}
<input type="text" id="lastname" name="lastname" value="{if isset($smarty.post.lastname)}{$smarty.post.lastname|escape:'htmlall'|stripslashes}{/if}" class="account_input" /></span>

Link to comment
Share on other sites

Milles merci Julien

C'est exactement ça, j'avoue que je n'avais pas pensé à la class customer...., même pas un petit coup d'oeil, pour dire...

Je pense que cette petite modif peut servir à d'autres, donc...

Sans tomber dans la caricature... Encore merci pour la justesse de la réponse et sa rapidité, ça c'est du forum....

Link to comment
Share on other sites

Une dernière petite question (pour aujourd'hui... lol)

Comment faire pour ne pas passer par la vérification de doublon de l'adresse Email.

Je m'expliques:

Quand je crée la fiche pour le compte du client je voudrais mettre dans le champ Email "[email protected]" ou quelque chose comme ça.

Mais Prestashop fait une vérification et me dit, impossible...

Une idée sans doute, et est-ce possible...

Merci d'avance

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...