2015-02-26 4 views
1

Я работаю над этим модулем оповещения по электронной почте для моего магазина Magento, и я основывал свой код на a magento stack exchange thread here. После долгих занятий я получил свою собственную версию для работы. Я задавался вопросом, почему пример кода не работает:Sending Stock Update Email Magento

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('[email protected]', 'Low Stock Notifier'); 
      $mail->addTo('[email protected]', '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('[email protected]', 'Low Stock Notifier'); 
      $mail->addTo('[email protected]', 'Your Name Here'); 
      $mail->setSubject('[Notice] An Item Has Gone Out of Stock'); 
      $mail->send(); 
     } 
    } 
} 

Любые критические замечания и лучшие практики я пропустил бы весьма признателен, так как я до сих пор новичок.

+0

Вы уверены, что $ stockItem-> getNotifyStockQty() больше, чем $ stockItem-> getQty()? Не могли бы вы проверить оба значения? – SeStro

+0

Это был мой первый намек на то, что значения как-то не тянут или нулевыми. они оба возвращают нулевые значения, когда я выводил их в mage :: log(). Мое предположение в то время состояло в том, что вызовы методов объекта getNotifyStockQty() и getQty() не существовали для этого объекта. –

ответ

1

Я не уверен, но я думаю, вы должны изменить

$stockItem = $observer->getEvent(); 

в

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

Это работало как шарм. –

0

Попробуйте это:

$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($observer->getEvent()->getProductId()); 
if ($stockItem->getQty() < $stockItem->getNotifyStockQty()) { 
    (...) 
} 
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('[email protected]', 'Low Stock Notifier'); 
      $mail->addTo('[email protected]', 'Your Name Here'); 
      $mail->setSubject('[Notice] An Item Has Gone Out of Stock'); 
      $mail->send();