Điều này hoạt động tốt trong Magento CE 1.6 và mới hơn:
$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);
Các mã chỉ mục có sẵn có thể được xem bằng truy vấn:
SELECT indexer_code FROM index_process;
Trong một Magento 1.7 bản địa có:
+---------------------------+
| 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 |
+---------------------------+
Trong Magento EE 1.13 thì khác, ở đó bộ chỉ mục sẽ tự động chọn các thực thể đã thay đổi trên mỗi lần chạy cron (mỗi phút).
CẬP NHẬT
Câu trả lời trên là chính xác 100% dù sao tôi nghĩ rằng thông tin dưới đây có thể thêm một cái gì đó nhiều hơn.
Nếu bạn cần thay đổi chỉ một vài giá trị thuộc tính trong sản phẩm và tự động cập nhật bảng chỉ mục tương đối, bạn có thể sử dụng chức năng này:
Mage::getSingleton('catalog/product_action')->updateAttributes();
thay vào đó, nếu bạn muốn quản lý reindex, hãy sử dụng mô hình thay thế: Mage::getResourceSingleton('catalog/product_action')->updateAttributes();
Ví dụ: tôi sử dụng chức năng sau để cập nhật nhanh chỉ các thuộc tính nhất định trong sản phẩm.
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);
}
Ghi chú:
Nếu bạn cần thay đổi cặp thuộc tính / giá trị tương tự trong một nhóm sản phẩm, bạn có thể vượt qua toàn bộ mảngproduct_ids