RomuGb Posted September 10, 2013 Share Posted September 10, 2013 bonjour, J'aimerais recevoir dans l'email de pré-commande envoyé par le module MAILALERTS, tous les messages privés et pas seulement le premier. Dans MailAlerts.php vous avez dans ligne 275 : $message = $order->getFirstMessage(); la fonction permet de récupérer le premier message privé de la commande : Dans classes/order/order.php on trouve la fonction getfirstmessage() : public function getFirstMessage() { return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' SELECT `message` FROM `'._DB_PREFIX_.'message` WHERE `id_order` = '.(int)$this->id.' ORDER BY `id_message` '); } Quelles modification dois-je faire pour récupérer TOUS les messages de la commande dans $message ? Un return Db::getInstance(_PS_USE_SQL_SLAVE_)->getall(' pourrait faire l'affaire ? Le retour doit se faire dans un tableau non ? Si oui comment mettre les données du tableau dans une chaine du genre $message = message1+retourligne+message2+retourligne+message3... Merci pour votre aide. Romuald. Link to comment Share on other sites More sharing options...
domi77185 Posted September 10, 2013 Share Posted September 10, 2013 Pour récupérer tous les enregistrements dans un tableau : Db::getInstance()->ExecuteS('requete SELECT SQL') 1 Link to comment Share on other sites More sharing options...
domi77185 Posted September 10, 2013 Share Posted September 10, 2013 Si oui comment mettre les données du tableau dans une chaine du genre $message = message1+retourligne+message2+retourligne+message3... J'avais oublié la seconde question : Un foreach permettra de lister tous les éléments du tableau et de les ajouter dans une variable 1 Link to comment Share on other sites More sharing options...
RomuGb Posted September 10, 2013 Author Share Posted September 10, 2013 Merci Domi, Bon n'étant pas un très fort en php, je suppose que les données tableau retournée par la requête Db::getInstance()->ExecuteS('requete SELECT SQL') revient dans $message Faut-il déclarer $message comme un tableau ? Je dois maintenant faire foreach ($message as $i => $value) { $TousLesMessages.= $value . "<br>"; } la variable $TousLesMessages devrait contenir : message 1+<br>message2<br>... ? c'est bon ? Merci. Link to comment Share on other sites More sharing options...
domi77185 Posted September 10, 2013 Share Posted September 10, 2013 (edited) Pour rester simple et avec les codes exemples que tu donnes : $codeSql = 'SELECT `message` FROM `'._DB_PREFIX_.'message` WHERE `id_order` = '.(int)$this->id.' ORDER BY `id_message`'; $message = Db::getInstance()->ExecuteS($codeSql) foreach ($message as $value) { $TousLesMessages.= $value['message'] . "<br />"; } La balise "<br />" est uniquement si la variable de retour attendu est du code HTML. Edited September 10, 2013 by domi77185 (see edit history) Link to comment Share on other sites More sharing options...
RomuGb Posted September 11, 2013 Author Share Posted September 11, 2013 Hello Domi, bon ça marche pas, il n'y a rien dans le commentaire c'est vide. Voici le code : Dans classes/order/order.php à la ligne 500 j'ai rajouter la fonction getAllMessage() avec tous les messages issue de la requète : public function getAllMessage() { return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT `message` FROM `'._DB_PREFIX_.'message` WHERE `id_order` = '.(int)$this->id.' ORDER BY `id_message` '); } Dans MailAlerts.php vous avez dans ligne 275 : $TousMessages = $order->getAllMessage(); foreach ($TousLesMessages as $value) { $message .= $value['TousLesMessages '] . '<br />'; } J'ai aussi essayé ça : $TousMessages = $order->getAllMessage(); foreach ($TousMessages as $cle => $element) { $message .= $element[$cle] . '<br />'; } Puis plus dans dans la même page, j'ai l'attribution des variables pour l'email à envoyer : $template_vars = array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{delivery_block_txt}' => MailAlert::getFormatedAddress($delivery, "\n"), '{invoice_block_txt}' => MailAlert::getFormatedAddress($invoice, "\n"), '{delivery_block_html}' => MailAlert::getFormatedAddress($delivery, '<br />', array( 'firstname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>', 'lastname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>')), '{invoice_block_html}' => MailAlert::getFormatedAddress($invoice, '<br />', array( 'firstname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>', 'lastname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>')), '{delivery_company}' => $delivery->company, '{delivery_firstname}' => $delivery->firstname, '{delivery_lastname}' => $delivery->lastname, '{delivery_address1}' => $delivery->address1, '{delivery_address2}' => $delivery->address2, '{delivery_city}' => $delivery->city, '{delivery_postal_code}' => $delivery->postcode, '{delivery_country}' => $delivery->country, '{delivery_state}' => $delivery->id_state ? $delivery_state->name : '', '{delivery_phone}' => $delivery->phone, '{delivery_other}' => $delivery->other, '{invoice_company}' => $invoice->company, '{invoice_firstname}' => $invoice->firstname, '{invoice_lastname}' => $invoice->lastname, '{invoice_address2}' => $invoice->address2, '{invoice_address1}' => $invoice->address1, '{invoice_city}' => $invoice->city, '{invoice_postal_code}' => $invoice->postcode, '{invoice_country}' => $invoice->country, '{invoice_state}' => $invoice->id_state ? $invoice_state->name : '', '{invoice_phone}' => $invoice->phone, '{invoice_other}' => $invoice->other, '{order_name}' => sprintf('%06d', $order->id), '{shop_name}' => Configuration::get('PS_SHOP_NAME'), '{date}' => $order_date_text, '{carrier}' => (($carrier->name == '0') ? Configuration::get('PS_SHOP_NAME') : $carrier->name), '{payment}' => Tools::substr($order->payment, 0, 32), '{items}' => $items_table, '{total_paid}' => Tools::displayPrice($order->total_paid, $currency), '{total_products}' => Tools::displayPrice($order->getTotalProductsWithTaxes(), $currency), '{total_discounts}' => Tools::displayPrice($order->total_discounts, $currency), '{total_shipping}' => Tools::displayPrice($order->total_shipping, $currency), '{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $currency), '{currency}' => $currency->sign, '{message}' => $message ); Je n'optiens rien, alors que je voudrais dans l'email avoir : Message du client : message 1 <br /> message 2 <br /> message 3 <br /> Une idée ? Merci. Link to comment Share on other sites More sharing options...
domi77185 Posted September 11, 2013 Share Posted September 11, 2013 Bonjour, Eviter de modifier le coeur de Prestashop, mettre plutôt la fonction "getAllMessage" dans la page MailAlerts.php Pour le foreach, ce n'est pas foreach ($TousLesMessages as $value) { $message .= $value['TousLesMessages '] . '<br />'; } Mais : foreach ($TousLesMessages as $value) { $messages .= $value['message'] . '<br />'; } Link to comment Share on other sites More sharing options...
RomuGb Posted September 12, 2013 Author Share Posted September 12, 2013 Salut domi, Ok j'essai cette manip. Mais pourquoi message dans indice tableau ??? foreach ($TousLesMessages as $value) { $messages .= $value['message'] . '<br />'; } D'où vient ce 'message' ?? Merci. Link to comment Share on other sites More sharing options...
RomuGb Posted September 13, 2013 Author Share Posted September 13, 2013 Ok Domi, j'ai bien compris les manips. $value['message'] => message est le champ extrait de la requête SQL, ça c'est bon... J'ai mis la fonction getAllMessage() dans la page mailalerts : public function getAllMessage() { return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT `message` FROM `'._DB_PREFIX_.'message` WHERE `id_order` = '.(int)$this->id.' ORDER BY `id_message` '); } à la suite des fonctions déjà présentes. Mon code d'appel à la fonction : $TousMessages = getAllMessage(); foreach ($TousMessages as $value) { $message.= $value['message'] . '<br />'; } Ca marche pas, il ne trouve pas la fonction ?! Il faut définir ou se trouve la fonction ? $TousMessages = ??->getAllMessage(); Merci d'avance. Link to comment Share on other sites More sharing options...
RomuGb Posted September 13, 2013 Author Share Posted September 13, 2013 Bon pour info, j'ai mis la fonction getAllMessage(); dans classes/orders.php et cela marche comme cela mais j'ai du toucher au coeur de Prestashop, alors il faudrait soit faire un override soit faire la fonction dans module/mailalerts/mailalerts.php mais je n'y arrive pas... Ca ne marchait pas quand je faisais le code ci-dessous dans la page mailalerts.php : public function getAllMessage() { return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT `message` FROM `'._DB_PREFIX_.'message` WHERE `id_order` = '.(int)$this->id.' ORDER BY `id_message` '); } $TousMessages = this->getAllMessage(); foreach ($TousMessages as $value) { $message.= $value['message'] . '<br />'; } je n'avais pas les bonnes informations. Si quelqu'un sait comment faire pour mettre la requète dans la page mailalerts.php ?? Merci. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now