THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 Hook login.form-top

(31-10-2018 09:47:05)


Bonjour,
J'ai besoin de pré remplir les champs e-mail et mot de passe de l'interface de connexion.
Pour le faire j'ai utiliser le hook "login.form-top" comme suit:
1- dans config.xml de mon module:
<hook id="createorupdatecustomer.hook.front" class="CreateOrUpdateCustomer\Hook\loginHook" scope="request">
            <tag name="hook.event_listener" event="login.form-top" type="front" method="onLoginMainTop" templates="render:login.html"/>
</hook>
2- dans ma fonction:
  $content = $this->render("login.html",['$value' => $email]);
  $event->add($content);
-->ERR: Unknown template login.html for module CreateOrUpdateCustomer sachant que login.html c'est la page html de Thelia où on renseigne l'email et le mot de passe et c'est normal qu'elle soit pas présente dans mon module "CreateOrUpdateCustomer " .

Merci de m'expliquer comment procéder pour réaliser ce traitement.

Offline

#2 Re: Hook login.form-top

(31-10-2018 11:20:31)


La construction "render:login.html" ne fonctionne qu'avec les templates du module.
Par ailleurs, tu ne peux pas utiliser les arguments "template" et "method" en même temps, c'est soit l'un, soit l'autre.
Enfin ['$value' => $email] ne peut pas fonctionner.

Si tu veux pré-remplir le champ email du formulaire de login, il vaudrait bien mieux utiliser du javascript, que tu placeras dans le hook login.javascript-initialization


OpenStudio Toulouse

Offline

#3 Re: Hook login.form-top

(31-10-2018 11:31:31)


D'accord c'est clair merci pour ton retour

Offline

#4 Re: Hook login.form-top

(31-10-2018 16:08:04)


Je suis en train de mettre en place mon fichier js et je comprend pas cette syntaxe :
templates="<action>:<file>[;<action>:<file>]*"

Dans mon tag faut rajouter mon fichier .js c à dire templates = "js:monfichier.js> mais le reste de la syntaxe j'ai pas compris quoi mettre.

Offline

#5 Re: Hook login.form-top

(31-10-2018 18:37:52)


Si tu utilises une méthode de ta classe hook pour générer le template (déclarée dans l'attribut "method"), tu n'a pas à utiliser l'attribut "template" dans la déclaration du hook.

C'est ou l'un ou l'autre, pas les deux.


OpenStudio Toulouse

Offline

#6 Re: Hook login.form-top

(02-11-2018 09:47:10)


Merci pour ta réponse sauf que ça répond pas à ma question.
Actuellement je suis entrain de développer un fichier javascript pour pré remplir mon champ email dans la page de login.
Pour déclarer ce ficher dans un hook j'ai fait comme suit:
1- dans config.xml de mon module:
    <hook id="createorupdatecustomer.hook.front" class="CreateOrUpdateCustomer\Hook\loginHook" scope="request">
             <tag name="hook.event_listener" event="login.javascript-initialization" type="front"  templates="js:loginPwdField.js"/>
   </hook>

C'est tous ce qu'il faut faire où je dois rajouter dans ma classe loginHook une fonction comme suit:
public function onLoginemail (HookRenderEvent $event)
    {
        $event->add(($this->add("default/assets/js/loginPwdField.js")));
    }

où il faut rajouter dans le fichier login.html le link de mon js? comme mentionner dans la doc pour les fichier css
{stylesheets source="MyModule" file="assets/css/*.css"}
    <link href="{$asset_url}" rel="stylesheet" type="text/css" />
{stylesheet}

Last edited by Samia (02-11-2018 09:47:46)

Offline

#7 Re: Hook login.form-top

(02-11-2018 10:09:01)


Ça dépend quand et comment tu récupères l'email que tu veux placer dans ton champ, mais je pense que tu te compliques la vie.

Si tu y accès dans ton appli (ton code PHP, quoi), tu vas faire un méthode dans ton hook qui va injecter le code JS.

Déjà, le hook login.javascript-initialization n'existe pas (à moins que tu l'aie ajouté dans le template ET dans le back-office ?), donc on va utiliser le hook "javascript-initialization", qui est disponible dans login.html via le layout simple-layout.tpl :
 

<hook id="createorupdatecustomer.hook.front" class="CreateOrUpdateCustomer\Hook\loginHook">
             <tag name="hook.event_listener" event="javascript-initialization" type="front"  method="onJavascriptInitialisation"/>
   </hook>

Ensuite, dans CreateOrUpdateCustomer\Hook\loginHook.php;

public function onJavascriptInitialisation(HookRenderEvent $event) {
    $email = ... ton adresse email à injecter ....;

    $event->add("
    <script>
        $(function() {
            $('...selecteur de ton champ email...').val($email);
        });
    </script>
    ");
}

En fait, les méthodes des hooks servent simplement à injecter du code l'endroit ou se trouve le {hook ...} dans le template.


OpenStudio Toulouse

Offline

#8 Re: Hook login.form-top

(02-11-2018 10:26:10)


Selon cette liste de hook http://doc.thelia.net/en/documentation/ … ack-office, le hook login.javascript-initialization que tu m'a proposé d'utiliser existe.
Je pense su'il faut mettre à jour cette liste.

Sinon merci pour ta réponse c'est  beaucoup plus clair.

Offline

#9 Re: Hook login.form-top

(02-11-2018 11:36:54)


Ha oui, pardon. Il existe bien ce hook


OpenStudio Toulouse

Offline

#10 Re: Hook login.form-top

(02-11-2018 14:30:15)


Du coup j'utilise lequel des deux hook ?
parce que ma fonction n'affiche rien je c'est pas si le problème est dans le hook choisi où dans mon code

public function onJavascriptInitialisation (HookRenderEvent $event)
    {
        //Recuperation de l url
        $URL = "http://".$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"];
        $_SESSION['adresse'] = $URL;
       
        $email = $_GET ['email'];

        $event->add ("
        <script>
        $(function(){
        $('input:email').val($email);
        })
        </script>
        ");
    }

Offline

#11 Re: Hook login.form-top

(02-11-2018 15:07:55)


Vide le cache, et je te conseille même de réinitialiser les hooks de ton module. Utilise dans une console la commande:  Thelia hook:clean CreateOrUpdateCustomer
(ou php Thelia hook:clean CreateOrUpdateCustomer si tu es sous Windows et que php est dans le PATH).

Pour récupérer un paramètre de requête utilise plutôt : $this->getRequest()->get('email');
Pour récupérer l'URl courante : $this->getRequest()->getUri();

Je ne pense pas que $('input:email') fonctionne. Essaie plutot $('input[type=email]') ou $('input#email]). Plus d'infos sur les selecteurs CSS (utilisés par jQuery) : https://www.w3schools.com/cssref/css_selectors.asp


OpenStudio Toulouse

Offline

#12 Re: Hook login.form-top

(02-11-2018 16:42:14)


J'ai essayé cette méthode et ça marche:
$('#email').val($.urlParam('email')); (sachant que urlParam () est une fct qui récupère un paramètre de l'url).

Sinon j'ai une autre question, j'ai développé une cnx à une deuxième base de données avec pdo et je veux bien que mon site thelia se connecte à cette base dés que je le lance donc je vois pas où mettre mon code (sachant que pour le tester je l'avais mis dans une action).