Jump to content

Bug sur l'envoi de mails, les balises smarty sont envoyées à la place de leurs valeurs


Recommended Posts

Bonjour,

sur une de mes template de mail, lorsque l'on change l'état de commande le mail est bien envoyé.

(order_conf.html)

Seul problème, plutôt que d'avoir les noms des produits etc... ceux sont les balises qui sont affichées.

{payment} , {date} , {products} ,   {discounts} , 

  {total_products}

 

 

Pourriez-vous me venir en aide ? 

Je suis sur Prestashop 1.6.1.18

Si quelqu'un a déjà rencontré ce problème :) 

Link to comment
Share on other sites

non, aucun override sur PaymentModule.php 

peut-être que la condition pour afficher ces variables n'est peut-être pas respectée :

 if ($id_order_state != Configuration::get('PS_OS_ERROR') && $id_order_state != Configuration::get('PS_OS_CANCELED') && $this->context->customer->id) 

mais je ne sais pas à quoi correspondent PS_OS_ERROR et PS_OS_CANCELLED.

Que ce soit dans une nouvelle commande ou quand l'on renvoi le mail idem ceux sont les balises qui apparaissent.

Link to comment
Share on other sites

oui, les variables dans les template ne sont pas corrompues.

les variables {total_paid} et {order_name} sont quant à elles inscrites correctement.

DÉTAILS DE LA COMMANDE

Commande : ***** passée le {date}

Paiement : {payment}
 
Référence Produit Prix unitaire Quantité Prix total
  {products} 
  {discounts}
  Produits  
  {total_products}  
  Réductions  
  {total_discounts}  
  Paquet cadeau  
  {total_wrapping}  
  Livraison  
  {total_shipping}  
  TVA totale  
  {total_tax_paid}  
  Total payé  
  25,52 €  
 

LIVRAISON

Transporteur : {carrier}

Paiement : {payment}
 
 
 

ADRESSE DE LIVRAISON

{delivery_block_html}
 
 
 

ADRESSE DE FACTURATION

{invoice_block_html}
Link to comment
Share on other sites

Après plusieurs tests il me semble que les mails envoyés via les états de commande ne passent pas par la classe PaymentModule.php 

donc les variables ne sont pas affectées aux mails.

En revanche lorsque l'on passe une commande avec un module de paiement le mail envoyé est bien complet.

Je vais donc changer le template de mail envoyé pour les états.

Il serait tout de même intéressant de pouvoir inclure ces variables dans les emails.

En tout cas merci à doekia et eolia pour vos réponses !

Bonne journée.

Link to comment
Share on other sites

Attends, je crois comprendre. Tu veux sur un autre état que la création de commande que les variables définie dans seulement ce dernier cas existent?

Désolé, sur les états c'est la function OrderHistory::addWithMail() et celle-ci ne déclare pas les variables du récap de commande

A toi de te faire un override si besoin

Link to comment
Share on other sites

  • 2 weeks later...

Vous pouvez créer votre propre modèle personnalisé qui peut être envoyé aux clients lorsque l'état de la commande est modifié. En cas de modèle de confirmation de commande, le client peut être confondu entre le courrier de confirmation de commande ou le message de mise à jour d'état.

Utilisez l'exemple suivant pour utiliser les espaces réservés utilisés dans le modèle de confirmation de commande mail.

$order = new Order((int)$order->id);   //Fetch the Order object of the current order

$invoice = new Address((int)$order->id_address_invoice);
$delivery = new Address((int)$order->id_address_delivery);
$delivery_state = $delivery->id_state ? new State((int)$delivery->id_state) : false;
$invoice_state = $invoice->id_state ? new State((int)$invoice->id_state) : false;

$customer = new Customer($order->id_customer);

$data = array(
   '{firstname}' => $customer->firstname,
   '{lastname}' => $customer->lastname,
   '{email}' => $customer->email,
   '{delivery_block_txt}' => $this->_getFormatedAddress($delivery, "\n"),
   '{invoice_block_txt}' => $this->_getFormatedAddress($invoice, "\n"),
   '{delivery_block_html}' => $this->_getFormatedAddress($delivery, '<br />', array(
							   'firstname' => '<span style="font-weight:bold;">%s</span>',
							   'lastname' => '<span style="font-weight:bold;">%s</span>')
							  );
);

protected function _getFormatedAddress(Address $the_address, $line_sep, $fields_style = array())
{
     return AddressFormat::generateAddress($the_address, array('avoid' => array()), $line_sep, ' ', $fields_style);
}

 

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