Jump to content

ajouter le ID_commande dans les mails pour un suivi incrémenté


Recommended Posts

Bonjour

je fais le suivi de mes commandes sur le ID commande, étant chronologiquement incrémenté c'est plus rapide de trouver la commande que le ID_order qui est une référence groupe de lettres

 

je souhaite modifier les mails envoyés au client en remplaçant / ajoutant le ID commande,

que dois ecrire dans le html à la place de {id_order} ?

 

merci de votre aide

Link to comment
Share on other sites

Salut,

 

je trouve également cette référence bizarre .

 

Tu peux effectivement ajouter des variables aux mails qui partent au clients, mais il faudra pour ça mettre les mains dans le code :

 

Pour les mails de changement d'état, tu surcharge la méthode

addWithemail de la classe orderHistory

exemple : override/classes/order/OrderHistory.php

<?php
class OrderHistory extends OrderHistoryCore{
    
    /**
     * @param bool $autodate Optional
     * @param array $template_vars Optional
     * @param Context $context Optional
     * @return bool
     */

	public function addWithemail($autodate = true, $template_vars = false, Context $context = null){
        if (!$context)
            $context = Context::getContext();

        $data = array(
                '{id_order}' => $this->id_order
        );

        if ($template_vars){
            $data = array_merge($data, $template_vars);
        }
        return parent::addWithemail($autodate, $data, $context);
    }
}

Et pour avoir la même chose à la confirmation de commande ... il te faut surcharger PaymentModule.php

 

Exemple : fichier override/classes/PaymentModule.php

class PaymentModule extends PaymentModuleCore{
    
        /**
     * Validate an order in database
     * Function called from a payment module
     *
     * @param int $id_cart
     * @param int $id_order_state
     * @param float   $amount_paid    Amount really paid by customer (in the default currency)
     * @param string  $payment_method Payment method (eg. 'Credit card')
     * @param null    $message        Message to attach to order
     * @param array   $extra_vars
     * @param null    $currency_special
     * @param bool    $dont_touch_amount
     * @param bool    $secure_key
     * @param Shop    $shop
     *
     * @return bool
     * @throws PrestaShopException
     */
    public function validateOrder($id_cart, $id_order_state, $amount_paid, $payment_method = 'Unknown',
        $message = null, $extra_vars = array(), $currency_special = null, $dont_touch_amount = false,
        $secure_key = false, Shop $shop = null)
    {

...
...
...
//contenu de la méthode d'origine ( copier - coller de la methode validateOrder dans le fichier classes/PaymentModule.php )
...
...
...
//Vers la ligne 622 dans la liste des paramétres balancés au template du mail, ajouter la ligne 
...

'{id_order}' => $order->id

...
...
...

    }
}

Voilà ... ne reste plus qu'à modifier tes templates de mail pour y mettre {id_order} dedans.

 

( et supprimer le fichier cache/class_index.php ) pour prendre en compte les surcharges faites

 

En espérant avoir été clair pour toi.

 

Ch.

Edited by stopher (see edit history)
Link to comment
Share on other sites

bonjour Stopher

... :(

je pensais qu'il suffisait de remplacer id_order par autre chose dans le template

 

je ne me sens pas capable de modifier le code...

comment pourrais je être aidé davantage ?

 

est-ce que ces modifs survivront à une montée en version ?

Link to comment
Share on other sites

Tu peux déjà essayer , juste de créer le fichier : override/classes/order/OrderHistory.php

 

et d'y coller le premier bloc de code que je t'ai donné ( tel quel )

 

( et supprimer le fichier cache/class_index.php ) pour prendre en compte les surcharges faites

 

Puis tester de changer un etat d'une commande qui envoie u mail avec la balise {id_order} dedans.

 

Et là .. bravo tu as fait ta première surcharge de classe dans Prestashop. ( au pire tu supprime simplement ce fichier fraichement créé et hop te revoilà avec le comportement de base )

 

On en vient à ta question sur la montée en version , le principe de la surcharge est de modifier le comportement de base sans modifier le code d’origine, mais en donnant une nouvelle méthode . Tu peux de ce fait également ajouter des fonctionnalité de cette manière.

 

Dans ce cas précis, tu ne modifies pas grand chose, et au pire ta surcharge ne fonctionnera plus .. mais le code de base de prestashop lui ne sera pas altéré .

 

Ch.

Link to comment
Share on other sites

et ben... j'ai presque réussi :

tous mes templates de mails fonctionnent en affichant dorénavant le n° à la place du 'id_name'

sauf... le mail de confirmation de commande

pourtant le code me parait identique aux autres... il affiche 'n°{id_order}' au lieu du contenu

 

y vois tu une erreur :

<tr>
            <td align="left" style="background-color:#DB3484; color:#FFF; font-size: 12px; font-weight:bold; padding: 0.5em 1em;">
            Détails de la commande n°{id_order}</td>
        </tr>
        <tr><td> </td></tr>
        <tr>
            <td align="left">
                Commande: n°{id_order} nom <strong><span style="color:#DB3484;">{order_name}</span> passée le {date}</strong>
                <br >Mode de paiement: <strong>{payment}</strong>
            </td>
 

Link to comment
Share on other sites

Super ;)

 

pas si compliqué hein :D

 

Bon pour la confirmation de commande, c'est normal, le mail ne part pas vraiment de la même manière ( il ne passe pas par ta fonction surchargée "addWithemail" de "OrderHistory" ), il te faut donc surcharger une deuxième méthode ( deuxième bloc de code dans mon premier message ).

 

Les etapes :

 

- créer un nouveau fichier de surcharge override/classes/PaymentModule.php

- commencer par y mettre ce contenu :

<?php
class PaymentModule extends PaymentModuleCore{
    
}

- Aller dans le code de prestashop classes/PaymentModule.php pour copier tout le code de la méthode validateOrder

 

La ligne à rechercher est la suivante : ( ligne 151 environ )

public function validateOrder($id_cart, $id_order_state, $amount_paid, $payment_method = 'Unknown',
		$message = null, $extra_vars = array(), $currency_special = null, $dont_touch_amount = false,
		$secure_key = false, Shop $shop = null)

cette fonction a environ 750 linges, ne soit pas effrayé, on ne fait qu'un copier/coller

 

- coller cette fonction à l'intérieur de notre ficher fraichement créé override/classes/PaymentModule.php

class PaymentModule extends PaymentModuleCore{

    //Coller ici 

}

- Ajouter la variable de template {id_order} vers la ligne 722 tu verras il y en a pleins tu ne peux pas passer à coté

'{id_order}' => $order->id,

( et supprimer le fichier cache/class_index.php ) pour prendre en compte les surcharges faites

 

Et voilà ... la variable {id_order} est maintenant prise en compte à la confirmation de commande.

 

Ne pas oublier de repasser aussi sur les PDF ( pdf, facture, avoirs etc )

 

Ch.

Edited by stopher (see edit history)
Link to comment
Share on other sites

Bonjour Stopher

je suis rentré de déplacement et je reprends la tache :

 

- merci pour avoir corrigé le code paymentmodule.php : j'ai créé le fichier et y est copié ton code dans le chemin overide/classes/paymentmodule.php

 

par ailleurs du me dit :

//Vers la ligne 622 dans la liste des paramétres balancés au template du mail, ajouter la ligne...//...

 

dans quel fichier dois-je faire cet ajout, et ou puis-je le trouver ?

Merci de ton aide

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...