2012-02-07 14 views
7

Me gustaría mostrar un recuento de visitas en una página de lista de categorías en Magento. Esta información parece que solía ser accesible a través de reports/product_collection pero no puedo encontrar una forma de acceder a ella correctamente.Obtenga el conteo de visitas para el producto magento basado en product_id

Básicamente me gustaría proporcionar una identificación del producto y obtener el conteo de la vista de dicho producto devuelto a mí.

+3

Me encontré con este hilo http://www.magentocommerce.com/boards/viewthread/27684/? – Ledgemonkey

+0

Esto funcionó, pero como se indicó en el hilo, fue bastante lento. ¡Gracias por la ayuda! – matt

Respuesta

15

Puede obtener el recuento de vistas a través del modelo 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); 

Cada elemento de la colección es un ejemplo catalog/product con un conjunto de propiedades vistas, lo que puede utilizar $product->getViews() para obtener el recuento.

Si no desea cargar todo el modelo de producto y sólo requiere el conteo de vista, se puede obtener de esta manera:

$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); 

Esto le da una matriz, las claves son los ID de producto y los valores son los recuentos de vista.

+0

¡Perfecto! Gracias por tu ayuda. – matt

+0

¿Cuál es la diferencia usando 'SELECT COUNT (*) AS views FROM report_viewed_product_index WHERE product_id = 446'? –

+0

¿Qué significan object_id y subject_id aquí en las tablas de report_event? –

Cuestiones relacionadas