Jump to content

Avoir la photo du produit commandé dans le mail d'alerte coté admin


Recommended Posts

Bonjour,

 

Suite à une demande de mon client je souhaite avoir dans le mail d'alerte de nouvelle commande, coté admin, la photo du produit commandé par le client.

 

Je vous explique il s'agit d'une boutique, donc le responsable souhaite visualiser le produit acheté sur internet pour l'enlever en boutique.

Pour cela il reçoit un mail pour une nouvelle commande, jusqu'ici tout va bien mais sur ce mail il n'y a que la référence. 

 

C'est la où ça se complique car les références il y en a beaucoup, il serait donc plus simple d'avoir une image du produit acheté pour que le responsable puisse le repérer plus facilement.

 

J'ai cherché une solution mais je ne trouve rien, j'ai l'impression que c'est la première fois que ce problème se pose.

 

Donc est ce possible de modifier ce mail d'alerte pour l'admin afin d'insérer l'image du produit commandé ?

 

Merci de votre aide.

Link to comment
Share on other sites

Oui mais la technique n'est pas vraiment expliqué en tout cas je ne suis pas arrivé après plusieurs essais.

 

Je ne comprends pas comment il faut faire.

 

Si peut être vous pouvez m'éclairer sur le sujet ça serait top.

 

Merci

Link to comment
Share on other sites

Bonsoir,

 

Oui mais la technique n'est pas vraiment expliqué en tout cas je ne suis pas arrivé après plusieurs essais.

Au contraire, je trouve qu'elle est très bien expliquée et surtout elle est partagée pour la communauté. ;)

 

Donc, il faut faire un override de la classe product.php (dossier prestashop/override/classes)

public function getImageId($id_product_attribute)
{
$sql = 'SELECT pai.id_image
         FROM `'._DB_PREFIX_.'product_attribute_image` pai
         WHERE pai.`id_product_attribute` = '.(int)$id_product_attribute;
return Db::getInstance()->getRow($sql);
}

Dans le fichier MailAlert.php du module mailalerts (dossier prestashop/modules/mailalerts)

remplacé la function sendCustomerAlert

public static function sendCustomerAlert($id_product, $id_product_attribute)
{
  $link = new Link();
  $id_lang = (int)Context::getContext()->language->id;
  $product = new Product((int)$id_product, false, $id_lang);

  //Modif ajout image
  $images_info = $product->getImages((int)$id_lang);
  $image_id_attribute = $product->getImageId($id_product_attribute);
  foreach ($images_info as $k => $image)
  {
	if($image_id_attribute['id_image'] == $image['id_image'])
	{
	 $id_image = $image['id_image'];
	 break;
	}

  }
  $images = $link->getImageLink($product->link_rewrite,$id_image,"home_01prem");

  $templateVars = array(
	 '{product}' => (is_array($product->name) ? $product->name[$id_lang] : $product->name),
	 '{product_link}' => $link->getProductLink($product),
	 '{image}' => $images
	);
  $customers = self::getCustomers($id_product, $id_product_attribute);
  foreach ($customers as $customer)
  {
   if ($customer['id_customer'])
   {
	$customer = new Customer((int)$customer['id_customer']);
	$customer_email = $customer->email;
	$customer_id = (int)$customer->id;
   }
   else
   {
	$customer_id = 0;
	$customer_email = $customer['customer_email'];
   }
   $iso = Language::getIsoById($id_lang);
   if (file_exists(dirname(__FILE__).'/mails/'.$iso.'/customer_qty.txt') &&
	file_exists(dirname(__FILE__).'/mails/'.$iso.'/customer_qty.html'))
	Mail::Send((int)Configuration::get('PS_LANG_DEFAULT'), 'customer_qty', Mail::l('Product available', $id_lang), $templateVars, strval($customer_email), NULL, strval(Configuration::get('PS_SHOP_EMAIL')), strval(Configuration::get('PS_SHOP_NAME')), NULL, NULL, dirname(__FILE__).'/mails/');
   Hook::exec('actionModuleMailAlertSendCustomer', array('product' => (is_array($product->name) ? $product->name[$id_lang] : $product->name), 'link' => $link->getProductLink($product), 'image' => $images));
   self::deleteAlert((int)$customer_id, strval($customer_email), (int)$id_product, (int)$id_product_attribute);
  }
}

Et ensuite supprimé le fichier /cache/class_index.php

Link to comment
Share on other sites

Concernant le override de la classe product.php. Je suis désolé mais je ne comprends pas vraiment où il faut rajouter ce code.

 

Lorsque je vais dans le dossier : override/classes  Je n'ai que des dossiers où à l'interieur de chaque il y a un index.php uniquement

 

Donc où copier ? :

 

public function getImageId($id_product_attribute)
{
$sql = 'SELECT pai.id_image
         FROM `'
._DB_PREFIX_.'product_attribute_image` pai
         WHERE pai.`id_product_attribute` = '
.(int)$id_product_attribute;
return Db::getInstance()->getRow($sql);
}

 

 

 

Merci de vos réponses !

Link to comment
Share on other sites

Bonsoir,

 

Désolé, mais là, tout en étant courtois, je trouve que tu "pousses le bouchon un peu loin".

 

J'ai pris le temps, la patience, de te décortiquer toute la procédure,  et tu demandes encore de l'aide pour les 4 lignes qui manquent.

 

Tu postes dans un forum de développement, ça nécessite un minimum d'auto-formation.

 

Comme dit Muche, fort justement, tu peux aussi faire une recherche concernant l'override.

 

Tu as aussi le bouton "Like This" et la modification du titre en [Résolu] pour finir... ;)

Link to comment
Share on other sites

Je te remercie de toute l'aide que tu m'a donné, mais je tiens juste à te dire que si la procédure etait entierement décortiquer je ne serais pas là à demander encore de l'aide.

 

Je suis désolé si je ne comprends pas l'anglais mais c'est comme ça. 

 

J'ai aussi chercher sur google de l'aide pour l'override et après plusieurs essais je bloque toujours.

 

Bref je resterai avec mon problème et donc il n'y aura pas le message {Résolu} dans mon titre.

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