php 如何对销量排序,magento中产品列表增加销量排序

c73d646704b40dcf04c43ed68ff7afce.png

Magento默认提供了一些排序选项,例如:产品位置,名字,价格。在这篇文章中你将学会让产品按照销量来排序。

要做到这些,我们需要重写一些Magento的核心文件。重定义核心文件并不是一个好的尝试,所以我们创建一个自己的模块来完成同样的功能并保证能升级。

我假设你知道如何建立你自己的模块并创建对应的文件(app/etc/modules/Alwayly_Catalog.xml),所以Magento能识别我们的模块。

现在,我们有了自己的模块并且已经被Magento识别,让我们创建自己的config.xml,路径为Alwayly/Catalog/etc/config.xml:

0.1.0

Alwayly_Catalog_Block_Product_List_Toolbar

Alwayly_Catalog_Model_Config

Alwayly_Catalog_Model_Resource_Product_Collection

也许你会想到,我们将要重写以下三个文件:

Mage_Catalog_Block_Product_List_Toolbar

Mage_Catalog_Model_Config

Mage_Catalog_Model_Resource_Product_Collection

我们的app/code/local/Alwayly_Catalog_Block_Product_List_Toolbar 应该这样:

class Alwayly_Catalog_Block_Product_List_Toolbar extends Mage_Catalog_Block_Product_List_Toolbar

{

public function setCollection($collection)

{

parent::setCollection($collection);

if ($this->getCurrentOrder()) {

if($this->getCurrentOrder() == 'qty_ordered') {

$this->getCollection()->getSelect()

->joinLeft(

array('sfoi' => $collection->getResource()->getTable('sales/order_item')),

'e.entity_id = sfoi.product_id',

array('qty_ordered' => 'SUM(sfoi.qty_ordered)')

)

->group('e.entity_id')

->order('qty_ordered ' . $this->getCurrentDirection());

} else {

$this->getCollection()

->setOrder($this->getCurrentOrder(), $this->getCurrentDirection())->getSelect();

}

}

return $this;

}

}

我们继承了Mage_Catalog_Block_Product_List_Toolbar中所有的功能和方法但我们自己重写了setCollection()方法

我们的Alwayly_Catalog_Model_Config是相当简单的:

class Alwayly_Catalog_Model_Config extends Mage_Catalog_Model_Config

{

public function getAttributeUsedForSortByArray()

{

return array_merge(

parent::getAttributeUsedForSortByArray(),

array('qty_ordered' => Mage::helper('catalog')->__('Sold quantity'))

);

}

}

到了这一步,产品的排序应该已经奏效,但我们在分页上有点小问题,无法显示正确的数目。我们可以在 Alwayly/Catalog/Model/Resource/Product/Collection.php中用以下代码来修复这个问题。

class Alwayly_Catalog_Model_Resource_Product_Collection extends Mage_Catalog_Model_Resource_Product_Collection

{

protected function _getSelectCountSql($select = null, $resetLeftJoins = true)

{

$this->_renderFilters();

$countSelect = (is_null($select)) ?

$this->_getClearSelect() :

$this->_buildClearSelect($select);

if(count($countSelect->getPart(Zend_Db_Select::GROUP)) > 0) {

$countSelect->reset(Zend_Db_Select::GROUP);

}

$countSelect->columns('COUNT(DISTINCT e.entity_id)');

if ($resetLeftJoins) {

$countSelect->resetJoinLeft();

}

return $countSelect;

}

}

就是这样,在4个简单的步骤之后,我们的Magento网站中的商品就能按销量来排序了。 希望你乐在其中~~~

(责任编辑:最模板)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值