protected function _registerCatalogCategoryEvent(Mage_Index_Model_Event $event) { switch ($event->getType()) { case Mage_Index_Model_Event::TYPE_SAVE: /** @var Mage_Catalog_Model_Category $category*/ $category = $event->getDataObject(); $productIds = array(); if ($this->config->indexAllCategoryProductsOnCategoryUpdate()) { $categories = array_merge(array($category->getId()), $category->getAllChildren(true)); $collection = Mage::getResourceModel('catalog/product_collection'); $collection->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left'); $collection->addAttributeToFilter('category_id', array('in' => $categories)); $productIds = $collection->getAllIds(); } elseif ($this->config->indexProductOnCategoryProductsUpdate()) { $productIds = $category->getAffectedProductIds(); } if (!$category->getData('is_active')) { $categories = array_merge(array($category->getId()), $category->getAllChildren(true)); $event->addNewData('catalogsearch_delete_category_id', $categories); if ($productIds) { $event->addNewData('catalogsearch_update_product_id', $productIds); } } elseif ($productIds) { $event->addNewData('catalogsearch_update_product_id', $productIds); $event->addNewData('catalogsearch_update_category_id', array($category->getId())); } elseif ($movedCategoryId = $category->getMovedCategoryId()) { $event->addNewData('catalogsearch_update_category_id', array($movedCategoryId)); } else { $event->addNewData('catalogsearch_update_category_id', array($category->getId())); } break; case Mage_Index_Model_Event::TYPE_DELETE: /** @var $category Mage_Catalog_Model_Category */ $category = $event->getDataObject(); $event->addNewData('catalogsearch_delete_category_id', $category->getId()); break; } return $this; }