Skip to main content

Sort Products by popularity count in Magento

Advance shorting option for category/list page in magento
Note: Please Make  folder structure app/code/local  and place all files in same structure in this folder ,If you make changes in core files its your risk.please make proper backup for core files if you modify that .


Step -1.
For Advance shorting option you have to create new collection by overriding Collection class.Overrride the collection class(/app/code/core/Mage/Catalog/Model/Resource/Product/collection.php and create a new function
<?php 
public function sortByReview($dir){
 $table = $this->getTable('review/review');
 $entity_code_id = Mage::getModel('review/review')->getEntityIdByCode(Mage_Rating_Model_Rating::ENTITY_PRODUCT_CODE); 
 $cond = $this->getConnection()->quoteInto('t2.entity_pk_value = e.entity_id and ','').$this->getConnection()->quoteInto('t2.entity_id = ? ',$entity_code_id); 
 $this->getSelect()->joinLeft(array('t2'=>$table), $cond,array('review' => new Zend_Db_Expr('count(review_id)'))) 
->group('e.entity_id')->order("review $dir"); 
 }

 ?>


Step-2 Find the file config.php(/app/code/core/Mage/Catalog/Model/config.php) and search for    getAttributeUsedForSortByArray(), And add here search option name  you get an array which you want to show in  toolbar drop-down in product-listing  page in your magento store.(line 4)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?php public function getAttributeUsedForSortByArray()
   {
       $options = array(
              'popularity'  => Mage::helper('catalog')->__('Popularty'),
             'topsellings'  => Mage::helper('catalog')->__('Top Selling') 
 );
       foreach ($this->getAttributesUsedForSortBy() as $attribute) {
           /* @var $attribute Mage_Eav_Model_Entity_Attribute_Abstract */
           $options[$attribute->getAttributeCode()] = $attribute->getStoreLabel();
       }
       return $options;
   }
  ?>

Step:3 Finally call overridden collection(created onStep-1) when Popularity attribute  (created on step 2) selected for sorting in list page. for this find 

/app/code/core/Mage/Catalog/Block/Product/List /toolbar.php
and include these lines.(line no..11 to 17) in setCollection method.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<?php
public function setCollection($collection)
   {
       $this->_collection = $collection;
       $this->_collection->setCurPage($this->getCurrentPage());
       // we need to set pagination only if passed value integer and more that 0
       $limit = (int)$this->getLimit();
       if ($limit) {
           $this->_collection->setPageSize($limit);
       }
        if($this->getCurrentOrder() == 'popularity'){
           $this->_collection->sortByReview($this->getCurrentDirection());
       }
     else if ($this->getCurrentOrder()) {
       
           $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());
    }
   
       return $this;
   }?>
Now you can see popularity option working in product listing page.

Comments

Popular posts from this blog

Parsing Domain Name From URL In PHP

To get Domain name from the url, we can use parse_url() php function. This would filter the domain name from the given url. $domain = str_ireplace ( 'www.' , '' , parse_url ( $url , PHP_URL_HOST )); This would return the google.com for both http://google.com and http://www.google.com

How to create Guest Wishlist For Magento

Add to wishlist without customer login Add three tables CREATE TABLE `wishlist` ( `wishlist_id` INT(11) NOT NULL AUTO_INCREMENT, `customer_id` INT(11) NULL DEFAULT NULL, `shared` INT(11) NULL DEFAULT NULL, `sharing_code` VARCHAR(50) NULL DEFAULT NULL, `updated_at` TIMESTAMP NULL DEFAULT NULL, `cookie` VARCHAR(255) NULL DEFAULT NULL, PRIMARY KEY (`wishlist_id`) ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB AUTO_INCREMENT=0 ; CREATE TABLE `wishlist_item` ( `wishlist_item_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Wishlist item ID', `wishlist_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Wishlist ID', `product_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Product ID', `store_id` SMALLINT(5) UNSIGNED NULL DEFAULT NULL COMMENT 'Store ID', `added_at` TIMESTAMP NULL DEFAULT NULL COMMENT 'Add date and time', `description` TEXT NULL COMMENT '...

Help & Support System Against COVID-19 Virus.

 Help & Support System Against COVID-19 Virus. UP Police-112 - http://112.up.gov.in/hi/Pages/complaint.aspx Corona Helpline: 18001805145 / 1075  GB Nagar CCRoom: 18004192211. Delhi CC Room: 011-23490311 Gurugram: 0124-2316100 Haryana: 0172-2570070 *For Plasma*- Noida Police: https://docs.google.com/forms/d/e/1FAIpQLSfKhjiQG80eIbcr78VGUeIA4e1W