Die folgenden Informationen sollten eine allgemeine Richtlinie sein, die zu einem grundlegenden Verständnis des Ganzen indexer thing
führt. Sie sind also keine vollständige exemplarische Vorgehensweise ... (wenn Sie zu dieser Antwort beitragen möchten, sind Sie herzlich willkommen.)
Hier sind mindestens 3 Schritte erforderlich:
- Erstellen Sie eine Indextabelle und ein zugehöriges Ressourcenmodell
- Erstellen Sie ein Indexer-Modell, das implementiert wird
Mage_Index_Model_Indexer_Abstract
- Fügen Sie Ihren Indexer zur Magento-Konfiguration hinzu
Vorgeschlagene Dokumentation:
- Der wahrscheinlich beste Weg, dies zu untersuchen, ist ein Blick darauf
Mage_Catalog_Model_Product_Indexer_Price
(dies ist eine der einfacheren Indeximplementierungen).
- Diese Ressource ist derzeit der beste Leitfaden, um den gesamten Prozess zu verstehen und zu entscheiden, welche Aktion erforderlich ist.
SCHRITT 1
Fügen Sie einfach Ihre Indextabelle wie bei jeder anderen Modultabelle im Installationsprogramm hinzu.
Ihr Ressourcenmodell muss die Logik für Reindex All
die reindexAll()
Methode implementieren : Sie würden hier wahrscheinlich alle Entitäten verarbeiten und alle Daten extrahieren.
SCHRITT 2
_registerEvent()
, _processEvent()
sind hier die wichtige Methode. Sie müssen in der folgenden Anleitung ein wenig graben, um die Logik dahinter zu verstehen
Fügen _registerEvent()
Sie im Grunde genommen einige Daten zu $event
, basierend auf dem 'Ereignistyp' und dem 'Entitätstyp'. Diese zusätzlichen Daten werden in der _processEvent()
Methode verwendet.
Sie müssen mindestens die folgenden Methoden in Ihrem Modell implementieren.
/**
* 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;
}
SCHRITT 3
Fügen Sie dies zu Ihrer Konfiguration hinzu. [Modul / Modell] ist das in Schritt 2 erstellte Modell. Wenn Sie also an dieser Stelle in System-> Indexer gehen, wird ein neuer Eintrag angezeigt
<global>
......
<index>
<indexer>
<some_key>
<model>module/model</model>
</some_key>
</indexer>
</index>
......
</global>
Quellen: