Я хотел бы отобразить количество просмотров на странице списка категорий в Magento. Эти данные выглядят так, как будто они были доступны через reports / product_collection, но я не могу найти способ получить к нему доступ правильно.
В основном я хотел бы предоставить идентификатор продукта и получить количество просмотров указанного продукта, возвращенного мне.
Вы можете получить количество просмотров с Mage_Reports_Model_Resource_Product_Collection
модели Mage_Reports_Model_Resource_Product_Collection
.
// set $to and $from to an empty string to disable time range filtering $from = '2012-01-01'; $to = now(); $productIds = array(9, 35); // your product ids, (works as an int, too) $reports = Mage::getResourceModel('reports/product_collection') ->addViewsCount($from, $to) ->addFieldToFilter('entity_id', $productIds);
Каждый элемент коллекции представляет собой экземпляр catalog/product
с набором свойств вида, поэтому вы можете использовать $product->getViews()
для получения счета.
Если вы не хотите загружать всю модель продукта и требовать только количество просмотров, вы можете получить ее так:
$resource = Mage::getResourceModel('reports/event'); $select = $resource->getReadConnection()->select() ->from(array('ev' => $resource->getMainTable()), array( 'product_id' => 'object_id', 'view_count' => new Zend_Db_Expr('COUNT(*)') )) // join for the event type id of catalog_product_view ->join( array('et' => $resource->getTable('reports/event_type')), "ev.event_type_id=et.event_type_id AND et.event_name='catalog_product_view'", '' ) ->group('ev.object_id') // add required filters ->where('ev.object_id IN(?)', productIds) ->where('ev.logged_at >= ?', $from) ->where('ev.logged_at <= ?', $to); $result = $resource->getReadConnection()->fetchPairs($select);
Это дает вам массив, ключи – идентификаторы продукта, а значения – количество просмотров.