发送库存更新电子邮件 Magento
Sending Stock Update Email Magento
我一直在为我的 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();
}
}
}
如果我错过任何评论和最佳实践,我将不胜感激,因为我还是个新手。
我不确定,但我认为,你必须改变
$stockItem = $observer->getEvent();
进入
$stockItem = $observer->getEvent()->getItem();
试试这个:
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($observer->getEvent()->getProductId());
if ($stockItem->getQty() < $stockItem->getNotifyStockQty()) {
(...)
}
感谢您的快速回复。我只想 post 我的最终 "cleaner" 解决方案。
我还添加了一个检查以查看该产品是否是 "grouped" 产品,因为如果不是,它会在每次对父 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();
我一直在为我的 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();
}
}
}
如果我错过任何评论和最佳实践,我将不胜感激,因为我还是个新手。
我不确定,但我认为,你必须改变
$stockItem = $observer->getEvent();
进入
$stockItem = $observer->getEvent()->getItem();
试试这个:
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($observer->getEvent()->getProductId());
if ($stockItem->getQty() < $stockItem->getNotifyStockQty()) {
(...)
}
感谢您的快速回复。我只想 post 我的最终 "cleaner" 解决方案。 我还添加了一个检查以查看该产品是否是 "grouped" 产品,因为如果不是,它会在每次对父 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();