2010-12-03 5 views
8

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

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

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

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

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

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

ответ

34

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

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

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

Small Предложение

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

$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'); 
+0

Это блестяще и отлично работает! Спасибо! – Alex 2010-12-03 09:12:40

4

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

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

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

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

Смежные вопросы