2022-10-25 10:45:38 - 米境通跨境电商
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应该这样:
classAlwayly_Catalog_Block_Product_List_ToolbarextendsMage_Catalog_Block_Product_List_Toolbar
{
publicfunctionsetCollection($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()方法