/** * Try dynamicly detect and call event handler from resource model. * Handler name will be generated from event entity and type code * * @param Event $event * @return $this */ public function callEventHandler(Event $event) { if ($event->getEntity()) { $method = $event->getEntity() . '_' . $event->getType(); } else { $method = $event->getType(); } $method = str_replace(' ', '', ucwords(str_replace('_', ' ', $method))); $resourceModel = $this->_getResource(); if (method_exists($resourceModel, $method)) { $resourceModel->{$method}($event); } return $this; }
/** * 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; }