1

我编写了一个扩展程序,在保存 Magento 1.7 时更新了一些自定义运输价值属性。一切正常,保存产品时,一切都按原样更新。但是,我还需要一个 cronjob 每晚更新它们,以防我需要通过董事会更改运输成本。

一切正常,并且正在正确更新属性值,但是在前端所有可配置产品都显示为Out of Stock,简单产品很好。

如果我去管理员,只需单击主产品并保存它,而不做任何它显示In Stock在前端的任何操作。此外,如果我去索引并重新索引Product Attributes它再次显示为前端的库存。然后我假设我的 cronjob 需要在保存每个产品时更新索引器。

环顾四周,我使用了以下代码,但是它似乎没有更新产品,并想知道是否有人可以提供帮助。我已经尝试了不同的变化Mage_Catalog_Model_ProductTYPE_SAVE但找不到我应该使用的!

$updateProduct = Mage::getModel('catalog/product')->load($_product->getId());

$updateProduct->setShippingLabel($shippData['delivery_type']);
$updateProduct->setShippingPrice($shippData['price']);
$updateProduct->setShippingNote($shippData['notes']);
try {
   $updateProduct->save();
   $updateProduct->setForceReindexRequired(true);
   Mage::getSingleton('index/indexer')->processEntityAction(
   $updateProduct, 
     Mage_Catalog_Model_Product::ENTITY, 
     Mage_Index_Model_Event::TYPE_SAVE 
   );

   echo $updateProduct->getId()." Successfully Updated \n";
   } catch(Exception $e){
     echo $e->getMessage().$updateProduct->getId()."\n";
 }

更新 17/5/2013 20:28

一直在玩代码,这个修改似乎有效,如果它完全没用而且是一种愚蠢的做法,请告诉我

$updateProduct = Mage::getModel('catalog/product')->load($_product->getId());
$updateProduct->setShippingLabel($shippData['delivery_type']);
$updateProduct->setShippingPrice($shippData['price']);
$updateProduct->setShippingNote($shippData['notes']);
try {
   $updateProduct->save();
   $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product->getId());
   $stockItem->setForceReindexRequired(true);
   Mage::getSingleton('index/indexer')->processEntityAction(
       $stockItem, 
       Mage_CatalogInventory_Model_Stock_Item::ENTITY,
       Mage_Index_Model_Event::TYPE_SAVE
   );
   echo $updateProduct->getId()." Successfully Updated \n";
} catch(Exception $e){
   echo $e->getMessage().$updateProduct->getId()."\n";
}
4

2 回答 2

0

执行 cron 作业后,您可以更新索引器:

$indexingProcesses = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
foreach ($indexingProcesses as $process) {
$process->reindexEverything();
}
于 2013-05-17T21:33:24.350 回答
-2

执行 cron 作业后,您可以更新索引器:

$indexingProcesses = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
foreach ($indexingProcesses as $process) {
$process->reindexEverything();
}

你好 dhawal 如果我必须运行 cron 作业以在现场重新索引产品,我必须将您提到的代码与此代码一起放置

$updateProduct = Mage::getModel('catalog/product')->load($_product->getId());
$updateProduct->`setShippingLabel`($shippData['delivery_type']);
$updateProduct->setShippingPrice($shippData['price']);
$updateProduct->setShippingNote($shippData['notes']);
try {
   $updateProduct->save();
   $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product->getId());
   $stockItem->setForceReindexRequired(true);
   Mage::getSingleton('index/indexer')->processEntityAction(
       $stockItem, 
       Mage_CatalogInventory_Model_Stock_Item::ENTITY,
       Mage_Index_Model_Event::TYPE_SAVE
   );
   echo $updateProduct->getId()." Successfully Updated \n";
} catch(Exception $e){
   echo $e->getMessage().$updateProduct->getId()."\n";
}

在同一页??

于 2013-10-22T10:00:42.187 回答