Jibax Posted January 16, 2020 Share Posted January 16, 2020 (edited) Bonjour à tous, ma problématique est la suivante : comment mettre à jour une valeur retournée par un hook de type display sans rafraichir la page ? Par exemple, lorsque qu'un client modifie les quantités d'un produit dans le panier, le hook actionCartSave est correctement appelé. Lorsque les quantités sont modifiées, je souhaite mettre à jour une valeur retournée par displayProductPriceBlock. J'execute donc la fonction Hook::exec("displayProductPriceBlock", array()) à la fin de la fonction hookActionCartSave() de mon module pour rafraîchir le contenu renvoyée par la méthode hookDisplayProductPriceBlock() de mon module. Mais rien de nouveau ne s'affiche (alors que j'effectue correctement les changements dans ma fonction et que hookActionCartSave() est correctement appelée). Est ce normal ? Doit on utiliser du JS pour cela ou le fonctionnement des hook permet de rafraîchir le contenu sans mettre a jour la page ? Prestashop 1.7.3 Edited January 17, 2020 by Jibax solved topic (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted January 16, 2020 Share Posted January 16, 2020 JS obligatoire le serveur ne peut pas modifier un élément html, il ne peut que générer une page en entier. Link to comment Share on other sites More sharing options...
Jibax Posted January 16, 2020 Author Share Posted January 16, 2020 Merci @Eolia de cette réponse rapide, Avez vous de la documentation ou un exemple sur comment appeler une fonction JS depuis une fonction php (le hook) ? Cordialement Link to comment Share on other sites More sharing options...
Eolia Posted January 16, 2020 Share Posted January 16, 2020 c'est l'inverse^^ JS appelle php, jamais dans l'autre sens, le js étant dans le navigateur et non sur le serveur. La fonction actionCartSave est appellée depuis le JS, il faut se mettre à la fin de cet appel js et récupérer la valeur que le serveur a renvoyé. Ouvrez votre console (F12) vous verrez ces appels xhr et les réponses serveur. Link to comment Share on other sites More sharing options...
Jibax Posted January 16, 2020 Author Share Posted January 16, 2020 Merci de la précision @Eolia. Mon fichier .js est correctement chargé et la fonction est prête a modifier le texte. Mais je ne comprends pas comment "se mettre à la fin de cet appel" après la actionCartSave. Auriez-vous un exemple ? Link to comment Share on other sites More sharing options...
Eolia Posted January 16, 2020 Share Posted January 16, 2020 Je ne travaille pas sur les 1.7 mais votre js effectue un appel ajax, il a donc un retour du serveur. Link to comment Share on other sites More sharing options...
Jibax Posted January 16, 2020 Author Share Posted January 16, 2020 (edited) Merci @Eolia de votre réponse, Je n'effectue pas d'appel ajax depuis le js. Ma logique est la suivante : J'effectue mes modifications en BDD grace à la function hookActionCartSave() , et je souhaite mettre a jour le template du panier grâce au JS. La fonction JS sert uniquement a modifier le DOM, rien d'autre. Dans ce cas, comment passer l'information du hook php vers la fonction JS ? La manière ci dessous ne fonctionne pas non plus echo '<script type="text/javascript">updateCartGroup("group3");</script>'; Edited January 16, 2020 by Jibax (see edit history) Link to comment Share on other sites More sharing options...
Jibax Posted January 17, 2020 Author Share Posted January 17, 2020 Ok j'ai finalement réussi a faire ce que je voulais, avec une logique différente : 1. Je catch l'evenement lorsque le panier est modifier en JS ( prestashop.on('updatedCart', function(event) {}) ) 2. J'effectue mon appel ajax vers le fichier de mon module ajax.php dans cet évenement 3. Je retourne les valeurs que je souhaite dans le résultat de ma requête ajax et je met a jour la vue Merci @Eolia pour l'aide Liens utiles http://www.muzzy.tech/blog/routing-ajax-requests-correct-way-prestashop-modules Video sur le fonctionnement Ajax <-> Php dans un module Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now