I'd like to display a view count on a category listing page in Magento. This data looks like it used to be accessible via reports/product_collection but I can't find a way to access it correctly.
I'd basically like to supply a product id and get the view count of the said product returned to me.
You can get the view count through the Mage_Reports_Model_Resource_Product_Collection
model.
// 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);
Each item in the collection is a catalog/product
instance with a views property set, so you can use $product->getViews()
to get the count.
If you don't want to load the whole product model and only require the view count, you can get it like this:
$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);
This gives you an array, the keys are the product ids and the values are the view counts.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With