Jump to content

[RESOLU] HTML Recuperer l'adresse Email client dans une Commande


Recommended Posts

Bonjour à tous, J'ai crée un email pour un nouvel état de commande, dans cet email, j'ai besoin d'y afficher le numéro de commade et l'adresse email du client . Pour le numéro de commande j'ai bien trouvé le code {order_name} qui fonctionne, par contre pour l'adresse email du client, J'ai cherché, à doite et a gauche, mais je n'ai rien trouvé, j'ai essayé (au pif) {email} ou {email_client} mais cela n'a hélas pas fonctionné ! Si quelqu'un à la solution ? Merci d'avance

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

il faut essayer :  

$email=$this->context->customer->email;

//depuis le php en question 

Ensuite il faudra creer une variable template ...

 

Bonjour ndiaga,

Et merci pour votre aide!

Désolé, mais je ne sais pas si cela a une importance pour la réponse, mais j'ai changé le début du titre de mon message (qui commençait par PhP)..par HTML..!!

Sinon pour votre réponse, j'ai compris qu'apres avoir coller ce code " $email=$this->context->customer->email; " quelque part dans mon fichier (new_email.html),

il fallait que je crée une "variable Template" ...Le problème c'est que je ne sais pas à quoi  ressemble une variable Template , où faut-il la créer et comment  faut-il l'utiliser??

voici la ligne de code de mon fichier.html, que je cherche à modifier :

<strong>Adresse électronique <a href="mailto:{email}" style="color: rgb(51, 127, 241);">{email}</a></strong>

désolé pour mes questions qui peuvent paraitre "candides"...mais je le suis..!

Encore merci !

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

A priori, J'ai trouvé ce fichier, admiOrdersController.php, dans lequel il y a une section /* add a new message for the current order and send and email to the custumer is needed */

dans cette section, j'ai trouvé ça:

$varsTpl = array (

'{lastname} ' => $customer->lastname,

'{firstname} ' => $customer->firstname,

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

'{order_name}' => $order -> getUniqReference(),

 

j'ai ensuite inséré votre code (modifié pour avoir la même syntaxe), ici :

'{email}' => $this -> context  -> Customer-> email ,

);

Apres enregistrement, lorsque je suis allé sur la page des commandes dans l'admin, j'ai eu une erreur 500, j'ai vidé

le cache, mais j'ai eu la même erreur 500 donc, je n'ai pas pu faire le test d'envoi d'email, avec cette variable {email}

... :-(

une idée ? déjà,suis-je sur la bonne voie ??

Merci pour votre aide

.

Link to comment
Share on other sites

Je n'ai pas trouvé la exactement le même code ( j'ai la version 1.6.1.10 de PS) que dans votre exmple, mais j'ai tout de même fait la modification avec votre syntaxe, j'ai trouvé 2 endroits dans ce fichier, ou l'on pouvait insérer ce code, j'ai tester aux 2 endroits successivement, mais j'ai toujours cette erreur 500 (qui disparait heureusement quand j'enlève le code inséré..) ??

Link to comment
Share on other sites

/* Add a new message for the current order and send an e-mail to the customer if needed */
        elseif (Tools::isSubmit('submitMessage') && isset($order)) {
            if ($this->tabAccess['edit'] === '1') {
                $customer = new Customer(Tools::getValue('id_customer'));
                if (!Validate::isLoadedObject($customer)) {
                    $this->errors[] = Tools::displayError('The customer is invalid.');
                } elseif (!Tools::getValue('message')) {
                    $this->errors[] = Tools::displayError('The message cannot be blank.');
                } else {
                    /* Get message rules and and check fields validity */
                    $rules = call_user_func(array('Message', 'getValidationRules'), 'Message');
                    foreach ($rules['required'] as $field) {
                        if (($value = Tools::getValue($field)) == false && (string)$value != '0') {
                            if (!Tools::getValue('id_'.$this->table) || $field != 'passwd') {
                                $this->errors[] = sprintf(Tools::displayError('field %s is required.'), $field);
                            }
                        }
                    }
                    foreach ($rules['size'] as $field => $maxLength) {
                        if (Tools::getValue($field) && Tools::strlen(Tools::getValue($field)) > $maxLength) {
                            $this->errors[] = sprintf(Tools::displayError('field %1$s is too long (%2$d chars max).'), $field, $maxLength);
                        }
                    }
                    foreach ($rules['validate'] as $field => $function) {
                        if (Tools::getValue($field)) {
                            if (!Validate::$function(htmlentities(Tools::getValue($field), ENT_COMPAT, 'UTF-8'))) {
                                $this->errors[] = sprintf(Tools::displayError('field %s is invalid.'), $field);
                            }
                        }
                    }

                    if (!count($this->errors)) {
                        //check if a thread already exist
                        $id_customer_thread = CustomerThread::getIdCustomerThreadByEmailAndIdOrder($customer->email, $order->id);
                        if (!$id_customer_thread) {
                            $customer_thread = new CustomerThread();
                            $customer_thread->id_contact = 0;
                            $customer_thread->id_customer = (int)$order->id_customer;
                            $customer_thread->id_shop = (int)$this->context->shop->id;
                            $customer_thread->id_order = (int)$order->id;
                            $customer_thread->id_lang = (int)$this->context->language->id;
                            $customer_thread->email = $customer->email;
                            $customer_thread->status = 'open';
                            $customer_thread->token = Tools::passwdGen(12);
                            $customer_thread->add();
                        } else {
                            $customer_thread = new CustomerThread((int)$id_customer_thread);
                        }

                        $customer_message = new CustomerMessage();
                        $customer_message->id_customer_thread = $customer_thread->id;
                        $customer_message->id_employee = (int)$this->context->employee->id;
                        $customer_message->message = Tools::getValue('message');
                        $customer_message->private = Tools::getValue('visibility');

                        if (!$customer_message->add()) {
                            $this->errors[] = Tools::displayError('An error occurred while saving the message.');
                        } elseif ($customer_message->private) {
                            Tools::redirectAdmin(self::$currentIndex.'&id_order='.(int)$order->id.'&vieworder&conf=11&token='.$this->token);
                        } else {
                            $message = $customer_message->message;
                            if (Configuration::get('PS_MAIL_TYPE', null, null, $order->id_shop) != Mail::TYPE_TEXT) {
                                $message = Tools::nl2br($customer_message->message);
                            }

                            $varsTpl = array(
                                '{lastname}' => $customer->lastname,
                                '{firstname}' => $customer->firstname,
                                '{id_order}' => $order->id,
                                '{order_name}' => $order->getUniqReference(),
                                '{message}' => $message
                            );
/* Update shipping number */
        if (Tools::isSubmit('submitShippingNumber') && isset($order)) {
            if ($this->tabAccess['edit'] === '1') {
                $order_carrier = new OrderCarrier(Tools::getValue('id_order_carrier'));
                if (!Validate::isLoadedObject($order_carrier)) {
                    $this->errors[] = Tools::displayError('The order carrier ID is invalid.');
                } elseif (!Validate::isTrackingNumber(Tools::getValue('tracking_number'))) {
                    $this->errors[] = Tools::displayError('The tracking number is incorrect.');
                } else {
                    // update shipping number
                    // Keep these two following lines for backward compatibility, remove on 1.6 version
                    $order->shipping_number = Tools::getValue('tracking_number');
                    $order->update();

                    // Update order_carrier
                    $order_carrier->tracking_number = pSQL(Tools::getValue('tracking_number'));
                    if ($order_carrier->update()) {
                        // Send mail to customer
                        $customer = new Customer((int)$order->id_customer);
                        $carrier = new Carrier((int)$order->id_carrier, $order->id_lang);
                        if (!Validate::isLoadedObject($customer)) {
                            throw new PrestaShopException('Can\'t load Customer object');
                        }
                        if (!Validate::isLoadedObject($carrier)) {
                            throw new PrestaShopException('Can\'t load Carrier object');
                        }
                        $templateVars = array(
                            '{followup}' => str_replace('@', $order->shipping_number, $carrier->url),
                            '{firstname}' => $customer->firstname,
                            '{lastname}' => $customer->lastname,
                            '{id_order}' => $order->id,
                            '{shipping_number}' => $order->shipping_number,
                            '{order_name}' => $order->getUniqReference()
                        );

Voici les 2 zones

Link to comment
Share on other sites

il y avait une "," de trop dans le code que je copie /colle...je n'ai plus l'erreur 500, !

Par contre la modif n'a pas fonctionné, le parametre {email} n'est pas pris en compte à l'envoi du mail..??!!

j'ai balayé tout le fichier et, des que je pouvais inserer ce code (finalement + de 2 fois) j'ai inséré ce code..pas d'erreur 500 au final, mais

le parametre ne fonctionne pas ! :-(

Link to comment
Share on other sites

Oui, j'ai bien compris qu'il fallait que je cherche, mais le problème c'est que je ne sais pas quoi ( et ou) chercher..!

Chercher dans le fichier AdminOrdersController.php ??, chercher dans un autre fichier ?

j'ai bien compris qu'il fallait chercher un code PhP particulier qui serait sensé utiliser ou qui ferait la liaison à "new_Email" (Template)

 

Désolé, mais entre le jargon ^particulier", le manque d'outil de débogage (à l'image de ce que l'on peut trouver dans d'autre language comme VBA)

mais ce n'est pas facile, pas très "intuitif" on va dire.. !

Et donc, je cherche ou et je cherche quoi??

Merci pour votre aide !

Link to comment
Share on other sites

Bonjour,

 

Après moult recherches et investigations ....je seche

j'ai bien modifié le fichier ...define.inc.php pour etre en mode debug, mais je n'ai pas tres bien compris l'outil de débug...!

donc pas moyen pour moi de suivre le fil...! donc la je suis un peu perdu ..!!

je pensais que le sujet serait assez simple à traiter... si quelqu'un à une voie de recherche ?

 

Merci pour votre aide !

 

loulou91

Webmaster (en herbe) du site: https://www.vintagethique.fr

Link to comment
Share on other sites

Bonjour à tous,

 

j'ai finalement trouvé (en fouillant dans les forum anglophone) une solution à mon problème !

la solution est donc de modifier le fichier

classes/orders/OrderHistory.php

 

et d'y inserer le code:

 

'{email}'=> $order->getCustomer()->email,

 

dans la partie du code ci-après:





public function sendEmail($order, $template_vars = false)
    {
        $result = Db::getInstance()->getRow('
			SELECT osl.`template`, c.`lastname`, c.`firstname`, osl.`name` AS osname, c.`email`, os.`module_name`, os.`id_order_state`, os.`pdf_invoice`, os.`pdf_delivery`
			FROM `'._DB_PREFIX_.'order_history` oh
				LEFT JOIN `'._DB_PREFIX_.'orders` o ON oh.`id_order` = o.`id_order`
				LEFT JOIN `'._DB_PREFIX_.'customer` c ON o.`id_customer` = c.`id_customer`
				LEFT JOIN `'._DB_PREFIX_.'order_state` os ON oh.`id_order_state` = os.`id_order_state`
				LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = o.`id_lang`)
			WHERE oh.`id_order_history` = '.(int)$this->id.' AND os.`send_email` = 1');
        if (isset($result['template']) && Validate::isEmail($result['email'])) {
            ShopUrl::cacheMainDomainForShop($order->id_shop);

            $topic = $result['osname'];
            $data = array(
                '{lastname}' => $result['lastname'],
                '{firstname}' => $result['firstname'],
                '{id_order}' => (int)$this->id_order,
                '{email}'=> $order->getCustomer()->email,
                '{order_name}' => $order->getUniqReference()

Voilà, ça fonctione à merveille!!

 

j'indique le sujet RESOLU !!

 

loulou91

Webmaster (en herbe) du site: https://www.vintagethique.fr

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