Thông tin sau đây phải là một dòng hướng dẫn chung dẫn đến sự hiểu biết cơ bản về toàn bộ indexer thing, vì vậy không phải là một "hướng dẫn" hoàn chỉnh ... (nếu bạn muốn đóng góp cho câu trả lời này, bạn được hoan nghênh)
Có ít nhất 3 bước cần thiết ở đây:
- Tạo một bảng chỉ mục và mô hình tài nguyên liên quan
- Tạo một mô hình Indexer thực hiện
Mage_Index_Model_Indexer_Abstract
- thêm chỉ mục của bạn vào cấu hình Magento
Tài liệu đề xuất:
- Có lẽ cách tốt nhất để đào sâu vào vấn đề này là đưa ra một cái nhìn
Mage_Catalog_Model_Product_Indexer_Price(đây là một trong những cách thực hiện chỉ mục dễ dàng hơn).
- Tài nguyên này , tại thời điểm này, xem hướng dẫn tốt nhất để hiểu toàn bộ quá trình để quyết định hành động được yêu cầu là gì.
BƯỚC 1
Chỉ cần thêm bảng chỉ mục của bạn trong trình cài đặt, như đối với bất kỳ bảng mô-đun nào khác.
Mô hình tài nguyên của bạn cần phải thực hiện các logic cho Reindex Alltrong reindexAll()phương pháp: có thể bạn sẽ xử lý tất cả các đối tượng ở đây trích lục tất cả dữ liệu.
BƯỚC 2
_registerEvent() , _processEvent()là phương pháp quan trọng ở đây, bạn sẽ cần đào sâu một chút trong hướng dẫn dưới đây để hiểu logic đằng sau chúng
Về cơ bản, _registerEvent()thêm một số dữ liệu vào $event, trên cơ sở 'loại sự kiện' và 'loại thực thể'. Dữ liệu bổ sung này sẽ được sử dụng trong _processEvent()phương pháp.
Bạn sẽ cần phải thực hiện ít nhất các phương thức sau trong mô hình của mình.
/**
* Data key for matching result to be saved in
*/
const EVENT_MATCH_RESULT_KEY = 'some_key';
/**
* Initialize resource model
*
*/
protected function _construct()
{
$this->_init('module/resource_model');
}
/**
* @var Used by matchEvent()
* for example if you are processing products ...
*/
protected $_matchedEntities = array(
Mage_Catalog_Model_Product::ENTITY => array(
Mage_Index_Model_Event::TYPE_SAVE,
Mage_Index_Model_Event::TYPE_MASS_ACTION,
Mage_Index_Model_Event::TYPE_DELETE
)
);
/**
* Get Indexer name
*
* @return string
*/
public function getName(){
return 'My indexer Name';
}
/**
* Get Indexer description
*
* @return string
*/
public function getDescription()
{
return 'My indexer Description';
}
/**
* Register indexer required data inside event object
*
* @param Mage_Index_Model_Event $event
*
* Register data required by process in event object
* @param Mage_Index_Model_Event $event
*/
protected function _registerEvent(Mage_Index_Model_Event $event)
{
$event->addNewData(self::EVENT_MATCH_RESULT_KEY, true);
$entity = $event->getEntity();
$dataObj = $event->getDataObject();
if ($entity == Mage_Catalog_Model_Product::ENTITY) {
if ($event->getType() == Mage_Index_Model_Event::TYPE_SAVE) {
$event->addNewData('yourmodule_update_product_id', $dataObj->getId());
} elseif ($event->getType() == Mage_Index_Model_Event::TYPE_DELETE) {
$event->addNewData(' yourmodule _delete_product_id', $dataObj->getId());
} elseif ($event->getType() == Mage_Index_Model_Event::TYPE_MASS_ACTION) {
$event->addNewData(' yourmodule _mass_action_product_ids', $dataObj->getProductIds());
}
}
}
/**
* Process event based on event state data
*
* @param Mage_Index_Model_Event $event
*/
protected function _processEvent(Mage_Index_Model_Event $event){
/** DO STUFF **/
return $this;
}
BƯỚC 3
Thêm phần này vào cấu hình của bạn, [mô-đun / mô hình] là mô hình được tạo ở bước 2. Vì vậy, tại thời điểm này, nếu bạn vào hệ thống-> trình chỉ mục, bạn sẽ thấy một mục mới
<global>
......
<index>
<indexer>
<some_key>
<model>module/model</model>
</some_key>
</indexer>
</index>
......
</global>
Nguồn: