/** * Append products positions to the current search term if needed * * @param Varien_Event_Observer $observer The observer * * @event catalogsearch_query_save_after * * @return void Nothing */ public function saveProductsPositions(Varien_Event_Observer $observer) { $searchTerm = $observer->getCatalogsearchQuery(); $positions = $searchTerm->getData("position"); if (!is_array($positions)) { $positions = array(); } $filteredPositions = array_filter($positions, 'is_numeric'); $resourceModel = Mage::getResourceModel("smile_elasticsearch/search_term_product_position"); $previousProducts = $resourceModel->getProductIdsByQuery($searchTerm); $resourceModel->saveProductsPositions($filteredPositions, $searchTerm); $productIdsToReindex = array_unique(array_merge($previousProducts, array_keys($filteredPositions))); // If Enterprise version, Mview index will handle editing, otherwise, process reindex if (!Mage::helper("smile_elasticsearch")->isEnterpriseSupportEnabled()) { Mage::getSingleton('index/indexer')->processEntityAction($searchTerm->setProductIds($productIdsToReindex), Smile_ElasticSearch_Model_Indexer_Search_Terms_Position::ENTITY, Mage_Index_Model_Event::TYPE_SAVE); } else { $helper = Mage::helper('smile_elasticsearch/index'); if ($helper->isLiveProductPositionInSearchReindexEnabled()) { $client = Mage::getModel('enterprise_mview/client'); $client->init(Mage::helper('enterprise_index')->getIndexerConfigValue('search_term_product_position', 'index_table')); $arguments = array('value' => $productIdsToReindex); $client->execute('smile_elasticsearch/index_action_search_terms_refresh_row', $arguments); } } }
/** * Save admin selected recommendations * * @see catalogsearch_query_save_after * @param Varien_Event_Observer $observer */ public function saveRecommendations($observer) { try { $query = $observer->getCatalogsearchQuery(); $request = Mage::app()->getRequest(); $selectedProducts = $request->getParam('grid_selected_products'); $selectedProducts = explode('&', $selectedProducts); if (is_array($selectedProducts) && count($selectedProducts) > 0) { $recommendationsData = array(); foreach ($selectedProducts as $selectedProduct) { $selectedProduct = explode('=', $selectedProduct); if (is_array($selectedProduct) && count($selectedProduct) > 1) { $productId = $selectedProduct[0]; $params = urldecode($selectedProduct[1]); $params = @base64_decode($params, true); $params = explode('=', $params); if (is_array($params) && count($params) > 0) { $position = (int) $params[1]; $recommendationsData[] = array('query_id' => $query->getId(), 'product_id' => $productId, 'position' => $position, 'date_recommended' => date('Y-m-d H:i:s')); } } } if (is_array($recommendationsData) && count($recommendationsData) > 0) { $collection = Mage::getModel('autocompleterecommendations/recommendation')->getCollection(); $collection->addFieldToFilter('query_id', $query->getId()); foreach ($collection as $recommendation) { $recommendation->delete(); } foreach ($recommendationsData as $data) { $recommendation = Mage::getModel('autocompleterecommendations/recommendation'); $recommendation->setData($data); $recommendation->save(); } } } } catch (Exception $e) { Mage::log($e->getMessage, null, 'extensions_store_autocompleterecommendations.log'); } }