Jump to content

Tous les messages privés dans le module mailalerts


RomuGb

Recommended Posts

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

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

  • Like 1
Link to comment
Share on other sites

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

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 by domi77185 (see edit history)
Link to comment
Share on other sites

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

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

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

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

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