Jump to content

[RÉSOLU] Modifier un template de mail avec un module


Kaudaj
 Share

Recommended Posts

Bonsoir amis développeurs,

Je développe actuellement un module pour PrestaShop 1.7.7.0 pour estimer une date de livraison en fonction des stocks des entrepôts.
Mon but est actuellement d'afficher la date de livraison dans le mail de confirmation de commande.

Ce que j'ai fais :

J'ai créé les fichiers suivants dans mon module :

image.png.23026028ef5ac808f1b8adf653d5baa8.png

Leurs contenus sont identiques à ceux d'origine, dans le dossier /mails à la racine, sauf que j'y ai rajouté :

<tr>
  <td style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-size: 0px; padding: 10px 25px; padding-top: 0; word-break: break-word;" align="left">
  	<div style="font-family: Open sans, arial, sans-serif; font-size: 16px; line-height: 25px; text-align: left; color: #363a41;" align="left">{delivery_date}</div>
  </td>
</tr>

pour les fichiers html et :

{delivery_date}

pour les fichiers texte.

Dans le fichier principal de mon module, j'ai souscris aux deux hooks suivants :

    public function hookActionEmailSendBefore($params)
    {
        if ($params['template'] === 'order_conf') {
            $params['templatePath'] = $this->local_path . 'mails/';
        }

        return true;
    }

    public function hookActionGetExtraMailTemplateVars($params)
    {
        if ($params['template'] === 'order_conf') {
            $orderId = $params['template_vars']['{id_order}'];

            $queryBus = $this->getQueryBus();

            $deliveryDate = $queryBus->handle(
                new GetDeliveryDateForOrder($orderId)
            );

            if ($deliveryDate) {
                $params['extra_template_vars']['{delivery_date}'] = $this->render(
                    '@Modules/kjpreparationdelays/views/templates/hook/deliverydate.html.twig',
                    [
                        'deliveryDate' => $deliveryDate,
                    ]
                );
            } else {
                $params['extra_template_vars']['{delivery_date}'] = '';
            }
        }
    }

Le premier pour utiliser mon template order_conf à la place de l'original, le deuxième pour ajouter la variable delivery_date qui contient seulement une balise span.

Je teste donc en passant une commande et voici ce que j'obtiens :

image.thumb.png.a31dd2b55109e4c1f43c07d8fbcbd4c5.png

Le tableau des produits est cassé.
J'ai essayé de retirer le html que j'ai ajouté mais cela ne change rien : c'est le fait de remplacer le template qui pose problème.

Ma question :

Est-ce la bonne solution pour remplacer un template de mail ?
J'ai bien lu la documentation suivante : https://devdocs.prestashop.com/1.7/modules/concepts/mail-templates/extend-a-layout-from-module/
Mais cette méthode ne me convient pas car le contenu est ajouté à la fin du mail. Ce n'est pas pertinent pour ma date de livraison, qui doit se trouver dans les informations de livraison.

Si ma méthode est la seule possible, sauriez-vous donc pourquoi le mail est-il cassé alors que les contenus du template est exactement le même que l'original order_conf ?

Merci pour votre aide,
Kaudaj.

Edited by Kaudaj (see edit history)

Share this post


Link to post
Share on other sites

Bon alors, j'ai régénéré le template de mail, je l'ai remplacé là où tu as dis et j'ai rajouté ma delivery_date et... ça marche 😂

J'avais déjà essayé à cet endroit là, mais j'avais fait de la réindentation automatique, peut-être que ça joue... 🤷‍♂️

Merci beaucoup !
Bonne soirée.

Share this post


Link to post
Share on other sites

  • Kaudaj changed the title to [RÉSOLU] Modifier un template de mail avec un module

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
 Share

×
×
  • Create New...

Important Information

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