/** * Process event * * @param \Magento\Index\Model\Event $event * @return void */ protected function _processEvent(\Magento\Index\Model\Event $event) { $data = $event->getNewData(); if (!empty($data['catalog_url_reindex_all'])) { $this->reindexAll(); } // Force rewrites history saving $dataObject = $event->getDataObject(); if ($dataObject instanceof \Magento\Framework\Object && $dataObject->hasData('save_rewrites_history')) { $this->_catalogUrl->setShouldSaveRewritesHistory($dataObject->getData('save_rewrites_history')); } if (isset($data['rewrite_product_ids'])) { $this->_catalogUrl->clearStoreInvalidRewrites(); // Maybe some products were moved or removed from website foreach ($data['rewrite_product_ids'] as $productId) { $this->_catalogUrl->refreshProductRewrite($productId); } } if (isset($data['rewrite_category_ids'])) { $this->_catalogUrl->clearStoreInvalidRewrites(); // Maybe some categories were moved foreach ($data['rewrite_category_ids'] as $categoryId) { $this->_catalogUrl->refreshCategoryRewrite($categoryId, null, true, true); } } }
/** * Register data required by catatalog product process in event object * * @param Event $event * @return $this */ protected function _registerCatalogProductEvent(Event $event) { switch ($event->getType()) { case Event::TYPE_SAVE: /* @var $product Product */ $product = $event->getDataObject(); $event->addNewData('catalogsearch_update_product_id', $product->getId()); break; case Event::TYPE_DELETE: /* @var $product Product */ $product = $event->getDataObject(); $event->addNewData('catalogsearch_delete_product_id', $product->getId()); break; case Event::TYPE_MASS_ACTION: /* @var $actionObject \Magento\Framework\Object */ $actionObject = $event->getDataObject(); $reindexData = array(); $rebuildIndex = false; // check if status changed $attrData = $actionObject->getAttributesData(); if (isset($attrData['status'])) { $rebuildIndex = true; $reindexData['catalogsearch_status'] = $attrData['status']; } // check changed websites if ($actionObject->getWebsiteIds()) { $rebuildIndex = true; $reindexData['catalogsearch_website_ids'] = $actionObject->getWebsiteIds(); $reindexData['catalogsearch_action_type'] = $actionObject->getActionType(); } $searchableAttributes = array(); if (is_array($attrData)) { $searchableAttributes = array_intersect($this->_getSearchableAttributes(), array_keys($attrData)); } if (count($searchableAttributes) > 0) { $rebuildIndex = true; $reindexData['catalogsearch_force_reindex'] = true; } // register affected products if ($rebuildIndex) { $reindexData['catalogsearch_product_ids'] = $actionObject->getProductIds(); foreach ($reindexData as $k => $v) { $event->addNewData($k, $v); } } break; default: break; } return $this; }