发送股票更新电子邮件Magento

时间:2015-02-26 18:38:19

标签: php magento zend-framework

我一直在为我的Magento商店开发此库存更新电子邮件提醒模块,我的代码基于a magento stack exchange thread here。经过多次摆弄,我得到了自己的版本。我想知道为什么示例代码不起作用:

class MyCompany_MyModule_Model_Observer
{
    public function lowStockReport($observer)
    {
        $stockItem = $observer->getEvent();

        if($stockItem->getQty() < $stockItem->getNotifyStockQty()){

            //stock is lower than the notify amount, send email

            $product = Mage::getModel('catalog/product')->load($stockItem->getProductId());

            $body = "{$product->getName()} :: {$product->getSku()} just Ran out of stock:\n\n";
            $body .= "Current Qty: {$stockItem->getQty()}\n";
            $body .= "Low Stock Date: {$stockItem->getLowStockDate()}\n";

            $mail = new Zend_Mail();
            $mail->setType(Zend_Mime::MULTIPART_RELATED);
            $mail->setBodyHtml($body);
            $mail->setFrom('lowstock@yourwebsite.com', 'Low Stock Notifier');
            $mail->addTo('youremail@gmail.com', 'Your Name Here');
            $mail->setSubject('[Notice] An Item Has Gone Out of Stock');
            $mail->send();
        }
    }
} 

但是,我的脏代码确实运行得很好:

class Custom_Stockupdate_Model_Observer
{

    public function lowStockReport($observer)
    {

        $stockItem = $observer->getEvent();
        $myItem = ($stockItem->debug());

        $theQty = $myItem['data_object (Mage_CatalogInventory_Model_Stock_Item)']['qty'];
        $theId = $myItem['data_object (Mage_CatalogInventory_Model_Stock_Item)']['product_id'];
        if($theQty == '0'){
            //stock is lower than the notify amount, send email

            $product = Mage::getModel('catalog/product')->load($theId);

            $body = "{$product->getName()} :: {$product->getSku()} just Ran out of stock:\n\n";
            $body .= "Current Qty: {$theQty}\n";

            $mail = new Zend_Mail();
            $mail->setType(Zend_Mime::MULTIPART_RELATED);
            $mail->setBodyHtml($body);
            $mail->setFrom('lowstock@yourwebsite.com', 'Low Stock Notifier');
            $mail->addTo('youremail@gmail.com', 'Your Name Here');
            $mail->setSubject('[Notice] An Item Has Gone Out of Stock');
            $mail->send();
        }
    }
} 

我错过了任何批评和最佳实践,因为我还是新手,所以非常感谢。

3 个答案:

答案 0 :(得分:1)

我不确定,但我想,你必须改变

$stockItem = $observer->getEvent();

$stockItem = $observer->getEvent()->getItem();

答案 1 :(得分:0)

试试这个:

$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($observer->getEvent()->getProductId());
if ($stockItem->getQty() < $stockItem->getNotifyStockQty()) {
    (...)
}

答案 2 :(得分:0)

感谢您的快速回复。我只是想发布我最后的“清洁”解决方案。 我还添加了一个检查,看看该产品是否是“分组”产品,因为如果不是,它会在每次对父母SKU进行更改时拍摄电子邮件。

class Custom_Stockupdate_Model_Observer
{

    public function lowStockReport($observer)
    {

        $stockItem = $observer->getEvent()->getItem();
        $product = Mage::getModel('catalog/product')->load($stockItem->getProductId());

        if($stockItem->getQty() < $stockItem->getNotifyStockQty() && $product->getTypeID() !== "grouped"){
            //stock is lower than the notify amount, send email


            $body = "{$product->getName()} :: {$product->getSku()} just Ran out of stock:\n\n";
            $mail = new Zend_Mail();
            $mail->setType(Zend_Mime::MULTIPART_RELATED);
            $mail->setBodyHtml($body);
            $mail = new Zend_Mail();
            $mail->setType(Zend_Mime::MULTIPART_RELATED);
            $mail->setBodyHtml($body);
            $mail->setFrom('lowstock@yourwebsite.com', 'Low Stock Notifier');
            $mail->addTo('youremail@gmail.com', 'Your Name Here');
            $mail->setSubject('[Notice] An Item Has Gone Out of Stock');
            $mail->send();
相关问题