24

在对单个项目进行修改后重新索引单个项目的正确方法是什么。

示例上下文:

我们公司依赖名为 Stone Edge 的第三方库存管理平台。我们还在多个店面销售商品,包括 Magento、亚马逊、Ebay 和 Buy.com

每 10 分钟一次,Stone Edge 将从站点下载所有订单,然后将库存调整发送回我们的 Magento 商店。这是通过向存储在我们的网络服务器上的 php 脚本发送一个简单的 http 请求来完成的,其中包含自上次更新以来库存更改的库存中每个项目的键值对数组。

在这些中的每一个上完成保存功能后,然后重新索引该项目,以免在更新时间和下一次站点范围重新索引之间反映 0 库存。

我在 Magento 论坛上找到了有关如何重新索引该项目的讨论:

$item->setForceReindexRequired(true);
Mage::getSingleton('index/indexer')->processEntityAction($item,Mage_CatalogInventory_Model_Stock_Item::ENTITY,Mage_Index_Model_Event::TYPE_SAVE);

在这组说明之前,您会看到类似

$item = Mage::getModel('cataloginventory/stock_item')->loadByProduct($entityid);
$item->addQty($change);
$item->save();

但是,完成此操作后,问题变得明显。项目本身被重新索引,但如果它们是分组产品的成员,则不会更新组产品。

我需要解决一个明显的问题。解决这个问题的最佳方法是什么?

如果我碰巧想出一个答案,我会发布一个答案。

4

2 回答 2

1

请注意,与分组产品相关的生产集合将尝试加入价格指数。所以你需要运行价格指数,然后你会看到结果。要仅运行您可以运行的价格指数,请进入 magento 根文件夹,然后:

php shell/indexer.php --reindex catalog_product_price

祝你好运!

于 2018-03-21T01:12:44.883 回答
0

First of all, thanks for the per-product reindex code. Was looking for that.

As for updating the parents, I would collect the parent ID's of products in an array when updating the simple products.

$masterIds[] = Mage::getModel('catalog/product_type_configurable') ->getParentIdsByChild( $product->getId() )

And when you're done with the simple products, just go over the masters and set them up to be reindexed as well with ->setForceReindexRequired(true)

于 2013-02-19T07:03:37.347 回答