Traineau Posted October 2, 2019 Share Posted October 2, 2019 (edited) Bonjour, Je développe un module de système de réservation, avec des tables supplémentaires contenant des informations sur mes produits. Je cherche à ajouter des variables dans mon template de mail order_conf. J'ai en effet des informations supplémentaires sur le produit à récupérer dans ces tables et à envoyer avec le mail (date de depart, l'hotel sélectionné etc...), et je ne trouve rien qui me plaise pour le faire proprement. J'ai vu qu'un hook existait => sendMailAlterTemplateVars, est-ce une bonne solution ? Comment fonctionne-il ? Sinon a voir si je peux override le controller qui s'occupe d'envoyer le mail de confirmation de commande, mais je ne touve pas ou il est. Je suis sur PrestaShop 1.7 mais si vous avez des solutions venant de 1.6 ça me va je peux m'adapter Merci d'avance ! Edited October 3, 2019 by Traineau (see edit history) Link to comment Share on other sites More sharing options...
hhennes Posted October 3, 2019 Share Posted October 3, 2019 Bonjour, Il existe pas mal de hook dans la classe mail de prestashop ( cf. https://github.com/PrestaShop/PrestaShop/blob/develop/classes/Mail.php ) Pour votre besoin j'utiliserais le hook actionGetExtraMailTemplateVars, pour rajouter les valeurs des variables custom. Il faut ensuite surcharger le template email order_conf dans le theme pour rajouter les placeholder des variables Et tout devrait fonctionner. Cordialement, 1 Link to comment Share on other sites More sharing options...
Traineau Posted October 3, 2019 Author Share Posted October 3, 2019 (edited) Bonjour ! Je viens de tester avec ce hook du coup et j'ai un souci : Dans mon modules j'ai donc hooker de cette manière : public function hookActionGetExtraMailTemplateVars($params) { if ($params['template'] == 'order_conf') { var_dump($params); // Mon code custom } } Jusqu'a la tout va bien, j'affiche bien les paramètres lorsque le bon template est appellé. De ce que je comprends les variables que l'on peut afficher dans notre template de mail Twig sont celles présentes dans : $params["template_vars"] A l'intérieur de ce tableau, toutes mes variables sont entourés par des { }, et je ne peux pas bouler dans mes produits dedans car cela ressemble à ça : {products}"]=> string(3010) " 2019-10-04 Produit test - 172,80 € 1 172,80 € 2019-10-05 Modelage aquatonic - 124,20 € 2 248,40 € " J'ai deux produits la dedans, mais du coup je ne peux pas boucler a l'intérieur pour rajouter mes infos pour chaque produit. Un peu plus loin dans les paramètres de ce hook on trouve effectivement un tableau de produits ["_products":protected], mais vu qu'il n'est pas dans mon tableau ["template_vars"] comment je peux afficher ces infos dans mon template twig ? Merci d'avance ! Edited October 3, 2019 by Traineau (see edit history) Link to comment Share on other sites More sharing options...
hhennes Posted October 3, 2019 Share Posted October 3, 2019 Ah oui effectivement je n'avais pas pensé à ce cas. Ma réponse est plus orientée générique pour ajouter une nouvelle variable. Dans votre cas il faudrait sans doute voir pour rajouter vos informations dans le template mails/en/order_conf_product_list.tpl peut être via un hook custom ceci devrait fonctionner sur les version avant 1.7.6 ( qui a changé de système de mail ) 1 Link to comment Share on other sites More sharing options...
Traineau Posted October 3, 2019 Author Share Posted October 3, 2019 (edited) Hehe justement je suis sur 1.7.6.1 😓 Je crois que je vais faire ça assez salement mais je vois pas d'autres solutions pour le moment, l'envoi de ce mail passe par la classe PaymentModule (fonction getEmailTemplateContent), je vais l'override pour récupérer mes propres infos et créer mon propre template de mail (en smarty du coup sans doute). Si jamais quelqun a une solution plus simple, ça m'étonne que ce soit aussi compliqué d'ajouter deux trois infos dans les produits des mails tout de même... EDIT : J'ai effectivement le fichier tpl order_conf_product_list.tpl present dans mes mails de langues (Le mix entre twig et smarty est vraiment abominable), je vais regarder de ce côté du coup merci bien ! Edited October 3, 2019 by Traineau (see edit history) Link to comment Share on other sites More sharing options...
Traineau Posted October 3, 2019 Author Share Posted October 3, 2019 (edited) Ok c'est bon j'ai réussi ! Voila donc la méthode : - Override la fonction validateOrder de la classe PaymentModule.php, c'est la dedans que les infos du produits sont générés (aux alentours de la ligne 415) - Override le order_conf_product_list.tpl pour afficher nos infos ainsi que le order_conf_product_list.txt dans mails/en/ - Copier coller ces deux fichiers dans tous nos dossiers mails (core et notre theme) et sous dossier de traduction (parcqu'ils ne sont pas générés automatiquement....) - Override le fichier order_conf.twig.html (bah oui le template smarty gere le tbody de notre tableau avec les infos de nos produits, mais le thead est dans le twig donc faut les faire correspondre, faut suivre hein) Au final assez peu de code mais faut savoir ou chercher quoi... Merci beaucoup @hhennes Edited October 3, 2019 by Traineau (see edit history) Link to comment Share on other sites More sharing options...
hhennes Posted October 3, 2019 Share Posted October 3, 2019 Merci d'avoir détaillé le fix je pense que tu ne seras pas le dernier à rencontrer ce problème 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