Реализация пользовательского индексатора Magento в расширении
Я работаю над добавлением дополнительного столбца в сетку в существующем внутреннем расширении. Мне нужно добавить индексатор к этому расширению, индексирующему здоровье (количество продаж) (примерно) за последние 3 месяца. (90 дней.) Я делю здоровье на двоих в месяц. (Итак, по полю для каждого 1-30, 31-60 и 61-90 дней назад.)
Имея в основном нулевые знания об индексаторах Magento, я решил создать простое безликое расширение (функционирующая страница adminhtml и ничего больше) и попытайтесь реализовать индексатор на этом, чтобы узнать, как работает индексация.
Я уже просмотрел несколько руководств, пытаясь понять, как это сделать, но ни в одном из них нет полностью функционирующих примеров.
- Mexbs: Создание пользовательского индекса Magento https://archive.is/rE0oz
- Aionhill: Как реализовать чрезвычайно быструю пользовательскую индексацию в Magento? https://archive.is/LMiF6
- Обмен стеками Magento: Пользовательский индексатор, способ Magento ? Пользовательский индексатор, способ Magento?
- Переполнение стека: Magento - Добавление индекса в столбец таблицы с помощью сценария обновления https://stackoverflow.com/questions/27009691/magento-add-index-to-table-column-using-upgrade-script
Они включают код, необходимый для создания индексатора, без подробного описания его реализации.
Как бы я создал индексатор, реализовал его и использовал для такого рода данных? Какой тип индекса мне нужен для индексации этого информация?
Я ищу объяснение индексов Magento и полную реализацию. Возможность создать и запустить индекс с такими данными в любом расширении работает для меня.
1 answers
Чтобы объявить индекс, вам нужно добавить это в config.xml
внутри тега global
:
<index>
<indexer>
<some_unique_index_name_here>
<model>[module]/indexer_something</model>
</some_unique_index_name_here>
</indexer>
</index>
Тег model
в приведенном выше коде содержит псевдоним для вашей модели индексатора. Он похож на тот, который вы используете для Mage::getModel(...)
.
Затем вам нужно создать класс, на который ссылается тег model
выше:
//you need to extend Mage_Index_Model_Indexer_Abstract class
class [Namespace]_[Module]_Model_Indexer_Something extends Mage_Index_Model_Indexer_Abstract
{
//you need to add the following 2 methods `_registerEvent` and `_processEvent`. Let''s just make them do nothing for now.
protected function _registerEvent(Mage_Index_Model_Event $event)
{
return $this;
}
protected function _processEvent(Mage_Index_Model_Event $event)
{
return $this;
}
//this is the index name that shows up in indexes section
public function getName()
{
return Mage::helper('[module]')->__('Your index name');
}
//this is the index description that shows up in indexes section
public function getDescription()
{
return Mage::helper('[module]')->__('Your index description');
}
//magic happens here
public function reindexAll()
{
//here goes the code you need for reindexing
return $this;
}
}
Если ваш индекс должен запускаться только с экрана индексов или из командной строки, то вы настроены.
Если вам нужно, чтобы ваш индекс срабатывал при разных событиях, он становится все сложнее.
Вам нужно реализовать методы, которые я оставил пустыми выше _registerEvent
и _processEvent
.
Но они действительно специфичны в зависимости от ваших событий.
Вы можете взглянуть на эти методы из основных индексаторов, чтобы увидеть, что произойдет.
Индексатор плоских изделий, например: https://github.com/OpenMage/magento-mirror/blob/magento-1.9/app/code/core/Mage/Catalog/Model/Product/Indexer/Flat.php