Algolia_Algoliasearch_Helper_Data::rebuildStoreProductIndexPage PHP Метод

rebuildStoreProductIndexPage() публичный Метод

public rebuildStoreProductIndexPage ( $storeId, $collectionDefault, $page, $pageSize, $emulationInfo = null, $productIds = null, $useTmpIndex = false )
    public function rebuildStoreProductIndexPage($storeId, $collectionDefault, $page, $pageSize, $emulationInfo = null, $productIds = null, $useTmpIndex = false)
    {
        if ($this->config->isEnabledBackend($storeId) === false) {
            $this->logger->log('INDEXING IS DISABLED FOR ' . $this->logger->getStoreName($storeId));
            return;
        }
        $this->logger->start('rebuildStoreProductIndexPage ' . $this->logger->getStoreName($storeId) . ' page ' . $page . ' pageSize ' . $pageSize);
        $emulationInfoPage = null;
        if ($emulationInfo === null) {
            $emulationInfoPage = $this->startEmulation($storeId);
        }
        $index_prefix = Mage::getConfig()->getTablePrefix();
        $additionalAttributes = $this->config->getProductAdditionalAttributes($storeId);
        /** @var Mage_Catalog_Model_Resource_Product_Collection $collection */
        $collection = clone $collectionDefault;
        $collection->setCurPage($page)->setPageSize($pageSize);
        $collection->addCategoryIds();
        $collection->addUrlRewrite();
        if ($this->product_helper->isAttributeEnabled($additionalAttributes, 'stock_qty')) {
            $collection->joinField('stock_qty', $index_prefix . 'cataloginventory_stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left');
        }
        if ($this->product_helper->isAttributeEnabled($additionalAttributes, 'ordered_qty')) {
            $collection->getSelect()->columns('(SELECT SUM(qty_ordered) FROM ' . $index_prefix . 'sales_flat_order_item WHERE ' . $index_prefix . 'sales_flat_order_item.product_id = e.entity_id) as ordered_qty');
        }
        if ($this->product_helper->isAttributeEnabled($additionalAttributes, 'total_ordered')) {
            $collection->getSelect()->columns('(SELECT SUM(row_total) FROM ' . $index_prefix . 'sales_flat_order_item WHERE ' . $index_prefix . 'sales_flat_order_item.product_id = e.entity_id) as total_ordered');
        }
        if ($this->product_helper->isAttributeEnabled($additionalAttributes, 'rating_summary')) {
            $collection->joinField('rating_summary', $index_prefix . 'review_entity_summary', 'rating_summary', 'entity_pk_value=entity_id', '{{table}}.store_id=' . $storeId, 'left');
        }
        $this->logger->start('LOADING ' . $this->logger->getStoreName($storeId) . ' collection page ' . $page . ', pageSize ' . $pageSize);
        $collection->load();
        $this->logger->log('Loaded ' . count($collection) . ' products');
        $this->logger->stop('LOADING ' . $this->logger->getStoreName($storeId) . ' collection page ' . $page . ', pageSize ' . $pageSize);
        $index_name = $this->product_helper->getIndexName($storeId, $useTmpIndex);
        $indexData = $this->getProductsRecords($storeId, $collection, $productIds);
        if (!empty($indexData['toIndex'])) {
            $this->logger->start('ADD/UPDATE TO ALGOLIA');
            $this->algolia_helper->addObjects($indexData['toIndex'], $index_name);
            $this->logger->log('Product IDs: ' . implode(', ', array_keys($indexData['toIndex'])));
            $this->logger->stop('ADD/UPDATE TO ALGOLIA');
        }
        if (!empty($indexData['toRemove'])) {
            $this->logger->start('REMOVE FROM ALGOLIA');
            $this->algolia_helper->deleteObjects($indexData['toRemove'], $index_name);
            $this->logger->log('Product IDs: ' . implode(', ', $indexData['toRemove']));
            $this->logger->stop('REMOVE FROM ALGOLIA');
        }
        unset($indexData);
        $collection->walk('clearInstance');
        $collection->clear();
        unset($collection);
        if ($emulationInfo === null) {
            $this->stopEmulation($emulationInfoPage);
        }
        $this->logger->stop('rebuildStoreProductIndexPage ' . $this->logger->getStoreName($storeId) . ' page ' . $page . ' pageSize ' . $pageSize);
    }

Usage Example

Пример #1
0
 public function rebuildProductIndex(Varien_Object $event)
 {
     $storeId = $event->getStoreId();
     $productIds = $event->getProductIds();
     $page = $event->getPage();
     $pageSize = $event->getPageSize();
     $useTmpIndex = (bool) $event->getUseTmpIndex();
     if (is_null($storeId) && !empty($productIds)) {
         foreach (Mage::app()->getStores() as $storeId => $store) {
             if (!$store->getIsActive()) {
                 continue;
             }
             $this->helper->rebuildStoreProductIndex($storeId, $productIds);
         }
     } else {
         if (!empty($page) && !empty($pageSize)) {
             $collection = $this->product_helper->getProductCollectionQuery($storeId, $productIds, $useTmpIndex);
             $this->helper->rebuildStoreProductIndexPage($storeId, $collection, $page, $pageSize, null, $productIds, $useTmpIndex);
         } else {
             $this->helper->rebuildStoreProductIndex($storeId, $productIds);
         }
     }
     return $this;
 }