Comment éviter de nouveaux e-mails afin de frontend et permettre seulement de back-end pour un site Web particulier?
-
16-10-2019 - |
Question
Nous avons un site de commerce électronique multi-magasins. Chaque magasin est site Web distinct. Pour un site Web particulier (site de dire avec id « 6 »), le nouvel e-mail de commande ne doit pas être déclenché alors que le client passe la commande.
Mais quand les contrôles d'administration, l'ordre dans le panneau d'administration, puis appuyez sur le bouton « e-mail envoyé », maintenant l'e-mail doit aller au client.
Qu'est-ce que j'ai essayé:
surchargée méthode de Mage_Core_Model_Email_Template::sendTransactional
et $this->setSentSuccess($this->send($email, $name, $vars));
remplacé par
if($storeId == 6){
$this->setSentSuccess(false);
} else{
$this->setSentSuccess($this->send($email, $name, $vars));
}
Mais cela ne vérifie pas si elle est appelée à partir frontend ou backend. Quelqu'un peut-il me donner un indice?
La solution
Je suivre la voie de la mise en place d'un observateur d'événements sur sales_order_save_after
qui commandes poignées placées sur le front-end par opposition à sales_order_place_after
qui poignées arrière-plan de la commande.
Autres conseils
Vous ne devriez pas réécrire Mage_Core_Model_Email_Template::sendTransactional
. Cela est utilisé pour tous les e-mails envoyés à partir de Magento.
Si vous ne souhaitez que le nouvel ordre e-mail à ne pas être envoyé Mage_Sales_Model_Order::sendNewOrderEmail()
rewrite.
Dans votre nouvelle classe faire le look de la méthode comme ceci:
public function sendNewOrderEmail() {
if (Mage::app()->getStore()->getId() == 6) {
return $this;
}
return parent::sendNewOrderEmail();
}
Ceci est juste un exemple. Ne pas coder dur la valeur 6
. Vous pouvez effectuer un réglage de configuration où vous pouvez sélectionner les vues des magasins pour lesquels l'e-mail n'est pas envoyé.