Magento:订购特定商品时发送通知

时间:2014-12-01 15:50:32

标签: magento

我们一直在使用第三方来打包和运送我们的包裹。因此,我们看不到所有通过的订单了。

但我们必须手动提供多种产品,例如数字礼品卡。有没有可能让Magento在客户订购特定SKU时向我们发送电子邮件?例如,告知我们需要为客户创建礼品卡?

我不希望看到我们的电子邮箱中的每个订单,只是包含一些特定的SKU。

谢谢, 门诺

2 个答案:

答案 0 :(得分:1)

是的,这可以通过自定义模块实现。创建模块并向其添加事件观察器的config.xml;

<events>
        <checkout_onepage_controller_success_action>
            <observers>
                <copymein>
                    <type>singleton</type>
                    <class>dispatcher/observer</class>
                    <method>ccMyEmail</method>
                </copymein>
            </observers>
        </checkout_onepage_controller_success_action>
    </events>

然后在Model / Observer.php中声明你的函数;

public function ccMyEmai($observer) {

    $order_ids = $observer->getData('order_ids');

    if(isset($order_ids)) {
        foreach ($order_ids as $order_id) :

        $sendToMe = false;
        $order = Mage::getModel('sales/order')->load($order_id);
            if (isset($order)) {

                 $orderItems = $order->getAllItems();
                 foreach ($orderItems as $_item) {

                     $product = Mage::getModel('catalog/product')->load($item->getData('product_id'));
                     if($product->getSku() == ('123' || '234' || '345')) { // Your SKUs
                              $sendToMe = true;
                     }

                 }
             }

         if($sendToMe) {
         $mail = Mage::getModel('core/email');
         $mail->setToName('Your name');
         $mail->setToEmail('your@email.com');
         $mail->setBody('Order number '.$order->getIncrementId().' has items that need action');
         $mail->setSubject('Order '.$order->getIncrementId().' needs attention');
         $mail->setFromName('Your from name');
         $mail->setFromEmail('your@siteemail.com');
         $mail->setType('text');

                try {
                    $mail->send();
                } catch (Exception $e) {
                    Mage::log($e);
                }
          }



         endforeach;
    }
 }

请注意,创建一个在前端不可见的产品属性更有效,该产品属性定义产品是否需要您的注意 - 有点像需要注意是/否,然后扫描订购的产品是否该属性中的值。比你正在寻找的SKU硬编码更容易管理;)

答案 1 :(得分:1)

您可以为此功能创建自定义模块。因此,在新模块中,您必须挂钩Observer事件:checkout_onepage_controller_success_action。 你可以这样做:

       <checkout_onepage_controller_success_action>
            <observers>
               <xxx_checkout_success>
                   <type>singleton</type>
                   <class>[Your Module Name]/observer</class>
                   <method>sendEmailToCustomerForSales</method>
               </xxx_checkout_success>
            </observers>
        </checkout_onepage_controller_success_action>

并且,在此sendEmailToCustomerForSales()方法中,它可以根据特定SKU向客户发送电子邮件。

请参阅此代码:

public function sendEmailToCustomerForSales($observer) {
    $orderId = (int)current($observer->getEvent()->getOrderIds());
    $order = Mage::getModel('sales/order')->load($orderId);
    $itemCollection = $order->getItemsCollection();
    foreach($itemCollection as $item) {
        $_product = Mage::getModel('catalog/product')->load($item->getProductId());
        if($_product->getSku() == '[Your specific sku]') {
            /*send an email to the customer*/
        }
    }
}