Подтвердить что ты не робот

Magento Правильный способ переиндексации одного предмета и связанного с ним продукта группы

Каков правильный способ переиндексации одного элемента после внесения в него изменений.

Пример контекста:

Наша компания опирается на платформу управления запасами третьей стороны под названием Stone Edge. Мы также продаем товары на нескольких витринах, среди которых Magento, Amazon, Ebay и Buy.com.

Каждые 10 минут Stone Edge будет загружать все заказы с сайтов, а затем отправлять корректировки инвентаря обратно в наш магазин Magento. Это делается путем отправки простого HTTP-запроса на php script, хранящегося на нашем веб-сервере, с массивом пар значений для каждого из элементов в инвентаре, которые изменили инвентарь с момента последнего обновления.

После того, как функция сохранения будет завершена на каждом из них, элемент будет повторно проиндексирован, чтобы не отражать 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();

Однако, после завершения этого, проблема стала очевидной. Сами элементы были повторно проиндексированы, но если они были членами сгруппированного продукта, то продукт группы не обновлялся.

Существует очевидная проблема, которую мне нужно будет решить. Каков наилучший подход к этой проблеме?

Я отправлю ответ, если мне придётся придумать.

4b9b3361

Ответ 1

Прежде всего, спасибо за код reindex для каждого продукта. Это искали.

Что касается обновления родителей, я бы собирал родительский идентификатор продуктов в массиве при обновлении простых продуктов.

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

И когда вы закончите с простыми продуктами, просто перейдите к мастерам и установите их также для переопределения с помощью ->setForceReindexRequired(true)