2010-12-03 10 views
8

Actualmente estoy escribiendo un script que me permite importar múltiples productos en magento.Magento API: Reconstruir índices después de agregar nuevos productos

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

El producto se crea perfectamente pero no se mostrará en mi frontend hasta que o bien guardarlo en el backend (sin cambiar nada!) O I reconstruir los índices en el backend.

Hice una diferencia en las tablas de base de datos relevantes para ver qué cambia cuando guardo el producto y agregué esos campos a mi script de importación, pero no tuvo ningún efecto. El producto importado tiene que estar bien, ya que aparece cuando reconstruyo los índices a través del servidor de forma manual.

El almacenamiento en caché está completamente deshabilitado.

Ahora mi pregunta es: ¿cómo puedo reconstruir los índices después de importar mis productos?

Respuesta

34

Puede utilizar dicho modelo en el módulo de índice.

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

Como necesita reconstruir todos los índices, no hay filtros aplicados a la colección. Pero puede filtrar la lista de procesos de índice por conjunto de parámetros (código, última indexación re-indexada, etc.) a través del método addFieldToFilter($field, $condition).

pequeña sugerencia

Sería genial para establecer índices a modo manual, mientras que la importación de los productos, que le ayudará a acelerar el proceso de importación, porque algunos de ellos observan producto de ahorro evento, por lo que se necesita algun tiempo. Puede hacerlo de la siguiente manera:

$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

¡Eso es brillante y funciona genial! ¡Gracias! – Alex

+0

Buen fragmento, gracias Ivan. Las importaciones lentas son una queja tan común sobre Magento, ¡es genial saber cómo mejorarla! –

+0

Fragmento muy bueno. ¡Mi importación se aceleró a las 3/4 del tiempo! ¡Gracias! –

4

Existen al menos dos circunstancias que evitan que el indexador reindexe un producto en el guardado.

Uno: la configuración "Actualización manual" en las propiedades de Índices que se encuentra en Sistema, Gestión de índices. Debe configurarlo en "Actualizar al guardar" si desea que un producto se indexe al guardarlo.

Dos: el indicador de producto setIsMassupdate que se utiliza, por ejemplo, en los procedimientos de importación por lotes de DataFlow para evitar que el indexador se active con cada llamada de método de salvar del producto.

Espero que esto ayude. Saludos, Alessandro

Cuestiones relacionadas