我已经编写了一个扩展程序,可以为Magento 1.7保存更新一些自定义运输价值属性。一切正常,保存产品时都会更新。然而,我还需要一个cronjob每晚更新它们,以防我需要通过电路板更改运费。
一切正常,并正在正确更新属性值,但是在前端,所有可配置产品都显示为Out of Stock
,简单产品就可以了。
如果我去管理员,只需点击主产品并保存即可,而不会在前端显示为In Stock
。此外,如果我转到索引并重新索引Product Attributes
,它再次在前端显示为库存。我认为我的cronjob需要在保存每个产品时更新索引器。
环顾四周,我使用了以下代码,但它似乎没有更新产品,并想知道是否有人可以提供帮助。我在Mage_Catalog_Model_Product
和TYPE_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";
}
2013年5月17日更新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";
}
答案 0 :(得分:0)
执行cron作业后,您可以更新索引器:
$indexingProcesses = Mage::getSingleton('index/indexer')->getProcessesCollection();
foreach ($indexingProcesses as $process) {
$process->reindexEverything();
}
答案 1 :(得分:-2)
执行cron作业后,您可以更新索引器:
$indexingProcesses = Mage::getSingleton('index/indexer')->getProcessesCollection();
foreach ($indexingProcesses as $process) {
$process->reindexEverything();
}
hello 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";
}
在同一页面?