THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bonjour la communauté,

Voila, j'ai un module maison qui se charge via un hook sur la page account avant Informations.
Celui-ci permet aux client de bénéficier de notre programme fidélité.
C'est un module indispensable pour nous car nos conditions fournisseurs sont contraignantes.
Ils n'accordent ni promotions, ni codes de réductions. Ce module nous est INDISPENSABLE.

Le but:
Un bouton via un code jquery éxécute les règles pour afficher les informations sans changer ou recharger la page.

Le code js est placé dans /local/modules/AvantagesClient/templates/frontOffice/default/asset/js/customer-benefits.js

Apparement le module est chargé avant le chargement de jQuery.
Donc son code n'est pas initialisé, d'ou l'erreur:

TypeError: "$" is not a function

Last edited by fredodefrance (22-05-2017 22:26:53)


C'est en faisant qu'on apprends.

Offline


Résolu en écrivant le code jquery directement dans le template.
Peut être pas la meilleure méthode mais ça fonctionne.

Le code js qui m'a permis de tester:
<script>
    window.onload = function() {
        if (window.jQuery) { 
            alert("jQuery initialized!");
        } else {
            alert("jQuery problem");
        }
    }
</script>

Résolu


C'est en faisant qu'on apprends.

Offline


Il y a une meilleure solution.

Pour que ton code soit chargé après jQuery, tu dois placer le chargement de ton JS dans le hook account.javascript-initialization. Pour ce faire, tu peux simplement placer dans ton config.xml :

<hook ...>
    ...
    <tag name="hook.event_listener" event="account.javascript-initialization" type="front" active="1" templates="js:asset/js/customer-benefits.js" />
</hook>

cf. http://doc.thelia.net/en/documentation/ … -thelia-23


OpenStudio Toulouse

Offline


Heu ouais ok,je suis passé à côté sur ce coup là.
Ca devient magique d'un seul coup.

    <hooks>
        <hook id="avantagesclient.hook" class="AvantagesClient\Hook\AvantagesClient">
            <tag name="hook.event_listener" event="account.top" type="front" method="onMainBodyTop" />
            <tag name="hook.event_listener" event="account.javascript-initialization" type="front" active="1" templates="js:assets/js/customer-benefits.js" />
    </hook>       
    </hooks>

Merki.

Last edited by fredodefrance (23-05-2017 00:05:09)


C'est en faisant qu'on apprends.