3

製品の最も閲覧されたファイルは次の場所にあります。

App/code/local/Mage/Catalog/Block/Product/Mostviewed.php 

次のコードを追加しました。

class Mage_Catalog_Block_Product_Mostviewed extends Mage_Catalog_Block_Product_Abstract
{
    public function __construct(){
        parent::__construct();
        $storeId = Mage::app()->getStore()->getId();
        $collection = Mage::getResourceModel('reports/product_collection')->addViewsCount();
        $collection->getSelect()->joinInner(array('e2' => 'catalog_product_flat_'.$storeId), 'e2.entity_id = e.entity_id');  
        $collection->addAttributeToSelect('*');  

        //$collection->printlogquery(true);
        //exit();
        $this->setProductCollection($collection);
    }

    protected function _prepareLayout()
    {
        parent::_prepareLayout();

        $toolbar = $this->getLayout()->createBlock('catalog/product_list_toolbar', microtime())
            ->setCollection($this->getProductCollection());

        $pager = $this->getLayout()->createBlock('page/html_pager', microtime());
        $toolbar->setChild('product_list_toolbar_pager', $pager);

        $this->setChild('toolbar', $toolbar);
        $this->getProductCollection()->load();

        return $this;
    }

    public function getPagerHtml()
    {
        return $this->getChildHtml('toolbar');
    }
}

追加されていないaddViewsCount()印刷SQL:

SELECT `e`.*, `e2`.* 
   FROM `catalog_product_entity` AS `e` 
   INNER JOIN `catalog_product_flat_1` AS `e2` 
      ON e2.entity_id = e.entity_id

追加されたaddViewsCount()印刷SQL:

SELECT COUNT(report_table_views.event_id) AS `views`, `e`.*, `e2`.* 
   FROM `report_event` AS `report_table_views` 
   INNER JOIN `catalog_product_entity` AS `e` 
      ON e.entity_id = report_table_views.object_id AND e.entity_type_id = 4 
   INNER JOIN `catalog_product_flat_1` AS `e2` 
      ON e2.entity_id = e.entity_id 
   WHERE (report_table_views.event_type_id = 1) 
   GROUP BY `e`.`entity_id` 
   HAVING (COUNT(report_table_views.event_id) > 0) 
   ORDER BY `views` DESC

addViewsCount()動作しないことによるソートを追加し、削除で動作しaddViewsCount()ます。

修正方法は?

編集: これで問題は解決しました。私の mysql DB に何か問題があります。コードは問題ありません。@liyakat @Alex に感謝します。

4

1 に答える 1

1

ビュー カウントは、Mage_Reports_Model_Resource_Product_Collection モデルから取得できます。

//$toおよび$fromを空の文字列に設定して、時間範囲のフィルタリングを無効にします

$storeId = Mage::app()->getStore()->getId();
    $products = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->setStoreId($storeId)
    ->addStoreFilter($storeId)        
    ->addViewsCount()
    ->joinField('inventory_in_stock', 'cataloginventory/stock_item',
                            'is_in_stock', 'product_id=entity_id', '{{table}}.is_in_stock=1');



    Mage::getSingleton('catalog/product_status')
        ->addVisibleFilterToCollection($products);
    Mage::getSingleton('catalog/product_visibility')
        ->addVisibleInCatalogFilterToCollection($products);        
    $products->getSelect()->limit( 15 );    
   return $products;

もっとお手伝いできることがあれば教えてください

于 2013-05-14T07:04:29.280 に答える