Magento API: восстановление индексов после добавления новых продуктов - PullRequest
8 голосов
/ 03 декабря 2010

В настоящее время я пишу скрипт, который позволяет импортировать несколько продуктов в magento.

$product = Mage::getModel('catalog/product');
$product->setSku($data['sku']);
//etc etc
$product->save();

Продукт создается отлично, но он не будет отображаться в моем интерфейсе, пока я не сохраню его в бэкэнде (не меняя ничего!) ИЛИ не перестрою индексы в бэкэнде.

Я проверил соответствующие таблицы базы данных, чтобы посмотреть, что меняется, когда я сохраняю продукт, и добавил эти поля в свой скрипт импорта, но это не дало никакого эффекта. Импортированный продукт должен быть в порядке, поскольку он появляется, когда я перестраиваю индексы через бэкэнд вручную.

Кэширование полностью отключено.

Теперь мой вопрос: как я могу перестроить индексы после импорта моих продуктов?

Ответы [ 2 ]

35 голосов
/ 03 декабря 2010

Вы можете использовать такую ​​модель в модуле Index.

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection();
$processes->walk('reindexAll');

Поскольку вам необходимо перестроить все индексы, к коллекции не применяются фильтры.Но вы можете отфильтровать список процессов индексирования по набору параметров (код, повторное индексирование в последний раз и т. Д.) С помощью метода addFieldToFilter($field, $condition).

Небольшое предложение

БудетЗамечательно установить индексы в ручной режим при импорте товаров, это поможет вам ускорить процесс импорта, потому что некоторые из них наблюдают событие сохранения продукта, поэтому это занимает некоторое время.Вы можете сделать это следующим образом:

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection();
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_MANUAL));
$processes->walk('save');
// Here goes your
// Importing process
// ................
$processes->walk('reindexAll');
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_REAL_TIME));
$processes->walk('save');
4 голосов
/ 25 октября 2011

Существуют как минимум два обстоятельства, которые не позволяют индексатору переиндексировать продукт при сохранении.

Один: параметр «Обновление вручную» в свойствах индексов, которые вы найдете в разделе «Система», «Управление индексами».Вам следует установить для него значение «Обновить при сохранении», если вы хотите, чтобы продукт был проиндексирован после сохранения.

Два: флаг продукта setIsMassupdate, который используется, например, в процедурах пакетного импорта DataFlow, чтобы предотвратитьиндексатор, запускаемый при каждом вызове метода сохранения продукта.

Надеюсь, это поможет.С уважением, Алессандро

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...