Ini berfungsi baik di Magento CE 1.6 dan yang lebih baru:
$event = Mage::getSingleton('index/indexer')->logEvent(
$product,
$product->getResource()->getType(),
Mage_Index_Model_Event::TYPE_SAVE,
false
);
Mage::getSingleton('index/indexer')
->getProcessByCode('catalog_url') // Adjust the indexer process code as needed
->setMode(Mage_Index_Model_Process::MODE_REAL_TIME)
->processEvent($event);
Kode pengindeks yang tersedia dapat dilihat menggunakan kueri:
SELECT indexer_code FROM index_process;
Dalam Magento asli 1,7 ada:
+---------------------------+
| indexer_code |
+---------------------------+
| cataloginventory_stock |
| catalogsearch_fulltext |
| catalog_category_flat |
| catalog_category_product |
| catalog_product_attribute |
| catalog_product_flat |
| catalog_product_price |
| catalog_url |
| groupscatalog2_category |
| groupscatalog2_product |
| tag_summary |
+---------------------------+
Dalam Magento EE 1.13 itu berbeda, di sana pengindeks secara otomatis mengambil entitas yang diubah pada setiap cron run (setiap menit).
MEMPERBARUI
Jawaban di atas adalah 100% benar pula saya pikir informasi di bawah ini dapat menambahkan sesuatu yang lebih.
Jika Anda perlu mengubah hanya beberapa nilai atribut dalam suatu produk dan secara otomatis memperbarui tabel indeks relatif Anda dapat menggunakan fungsi ini:
Mage::getSingleton('catalog/product_action')->updateAttributes();
jika Anda ingin mengelola pengindeksan ulang dengan Anda sendiri, gunakan model resourse: Mage::getResourceSingleton('catalog/product_action')->updateAttributes();
Sebagai contoh, saya menggunakan fungsi berikut untuk memperbarui secara cepat hanya atribut tertentu dalam suatu produk.
public function updateProductAttribute($product_id, $arrayChanges, $reindex = true)
{
if (!is_array($product_id)) {
$product_id = array($product_id);
}
// ths should trigger all required reindex
$update = Mage::getSingleton('catalog/product_action');
// Update value
if (!$reindex) {
$update = Mage::getResourceSingleton('catalog/product_action');
}
$update->updateAttributes($product_id, $arrayChanges, 0);
}
catatan:
Jika Anda perlu mengubah pasangan atribut / nilai yang sama dalam kelompok produk, Anda dapat melewati seluruh arrayproduct_ids