Jump to content

Edit History

Kaudaj

Kaudaj

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.

Kaudaj

Kaudaj

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}

 

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.

×
×
  • Create New...