ใช้งานได้ดีใน Magento CE 1.6 และใหม่กว่า:
$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);
รหัสดัชนีสามารถดูได้โดยใช้แบบสอบถาม:
SELECT indexer_code FROM index_process;
ใน Magento ดั้งเดิม 1.7 มี:
+---------------------------+
| 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 |
+---------------------------+
ใน Magento EE 1.13 มันแตกต่างกันที่นั่นตัวสร้างดัชนีจะเลือกเอนทิตีที่เปลี่ยนแปลงในแต่ละ cron run (ทุกนาที)
UPDATE
คำตอบข้างต้นถูกต้อง 100% ต่อไปฉันคิดว่าข้อมูลด้านล่างสามารถเพิ่มอะไรเพิ่มเติม
หากคุณต้องการเปลี่ยนค่าคุณลักษณะเพียงเล็กน้อยในผลิตภัณฑ์และอัปเดตตารางดัชนีแบบสัมพัทธ์โดยอัตโนมัติคุณสามารถใช้ฟังก์ชันนี้:
Mage::getSingleton('catalog/product_action')->updateAttributes();
ถ้าคุณต้องการจัดการ reindex ด้วยตัวคุณเองใช้ resourse model แทน: Mage::getResourceSingleton('catalog/product_action')->updateAttributes();
ตัวอย่างเช่นฉันใช้ฟังก์ชันต่อไปนี้เพื่ออัปเดตเฉพาะแอททริบิวบางอย่างในผลิตภัณฑ์
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);
}
บันทึก:
หากคุณต้องการเปลี่ยนคู่ของคุณลักษณะ / ค่าเดียวกันในกลุ่มผลิตภัณฑ์คุณสามารถผ่านอาร์เรย์ทั้งหมดของproduct_ids