Jump to content
Traineau

[Résolu]Ajouter des variables template d'email order_conf

Recommended Posts

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 by Traineau (see edit history)

Share this post


Link to post
Share on other sites

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,
 

Share this post


Link to post
Share on other sites

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 by Traineau (see edit history)

Share this post


Link to post
Share on other sites

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 )

  • Thanks 1

Share this post


Link to post
Share on other sites

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 by Traineau (see edit history)

Share this post


Link to post
Share on other sites

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 by Traineau (see edit history)

Share this post


Link to post
Share on other sites

Merci d'avoir détaillé le fix je pense que tu ne seras pas le dernier à rencontrer ce problème :)

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More