1

Magento 1.7 の保存時にいくつかのカスタム配送値属性を更新する拡張機能を作成しました。製品を保存すると、すべて正常に機能し、すべてが更新されます。ただし、ボード全体で送料を変更する必要がある場合に備えて、cronjob で毎晩更新する必要もあります。

すべてが機能しており、属性値を正しく更新していますが、フロントエンドでは構成可能なすべての製品が として表示されていOut of Stockます。単純な製品は問題ありません。

管理者に行くと、マスター プロダクトをクリックして、何もせずに保存するだけIn Stockで、フロントエンドに表示されます。また、インデックスに移動してインデックスを再作成Product Attributesすると、フロントエンドで在庫ありとして再び表示されます。その場合、cronjob は、各製品を保存するときにインデクサーを更新する必要があると思います。

周りを見回して、次のコードを使用しましたが、製品を更新していないようで、誰かが助けてくれるかどうか疑問に思いました. Mage_Catalog_Model_Productandの周りでさまざまなバリエーションを試しまし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";
 }

更新 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

-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 に答える