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 All
trong 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: