Magento销售类别列出所有带有销售价格的商品



我需要在一个分类页面中显示所有在售产品。。而不是浏览整个目录&手动添加产品我想要一个功能,将挑选"特价"产品

我在网上找到这篇文章http://www.creativemgroup.com/creative-media-web-services/magento-blog/68-create-a-magento-on-sale-category-the-right-way

&got在这里工作

问题是它没有按照"排序依据"对产品进行排序。更改排序选项没有什么区别。。我如何使用此代码,但仍然可以使用排序工具栏?。。

非常感谢你的帮助。。

//////////////////////////////这是我的Catogory-自定义设计中的代码//////////////////////////////

<reference name="content">
<remove name="product_list"/>
<block type="catalog/product_sale" name="product_sale" alias="sale" template="catalog/product/list.phtml">
<block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
<block type="page/html_pager" name="product_list_toolbar_pager"/>
</block>
<action method="setLimit"><limit>32</limit></action>
<action method="setColumnCount"><columns>3</columns></action>
<action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
<action method="addPriceBlockType">
<type>bundle</type>
<block>bundle/catalog_product_price</block>
<template>bundle/catalog/product/price.phtml</template>
</action>
</block>
</reference>
<reference name="product_list_toolbar">
<action method="setDefaultGridPerPage">
<limit>32</limit>
</action>
</reference>

//////////////////////////////////////////以下是PHP的主要函数/////////////////////////////////////////

类Mage_Catalog_Block_Product_Sale扩展Mage_Catalog_Block_Product_List{

//public $_collection;  
public function getProductsLimit() 
{ 
if ($this->getData('limit')) {
return intval($this->getData('limit'));
} else {
return 32;
}
}
public function __construct()
{
parent::__construct();
$collection = $this->_getProductCollection();
$this->setCollection($collection);
}



protected function _getProductCollection()  
{  
$page = Mage::getBlockSingleton('page/html_pager')->getCurrentPage();
date_default_timezone_set(Mage::getStoreConfig('general/locale/timezone'));
$todayDate = strftime("%Y-%m-%d",Mage::app()->getLocale()->storeTimeStamp(Mage::app()->getStore()->getId()));
$storeId    = Mage::app()->getStore()->getId();  
$product    = Mage::getModel('catalog/product');  
$this->_productCollection = $product->setStoreId($storeId)  
->getCollection()  
->addAttributeToSelect(array('name','status', 'price', 'special_price', 'small_image','required_options','special_from_date', 'special_to_date'), 'inner')
->joinField('stock_status','cataloginventory/stock_status','stock_status',
'product_id=entity_id', array(
'stock_status' => Mage_CatalogInventory_Model_Stock_Status::STATUS_IN_STOCK,
'website_id' => Mage::app()->getWebsite()->getWebsiteId(),
))
->addAttributeToFilter('special_price', array('gt' => 0), 'left')
->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
->addAttributeToFilter('special_to_date', array('or'=> array(
0 => array('date' => true, 'from' => $todayDate),
1 => array('is' => new Zend_Db_Expr('null')))
), 'left')
//->setOrder('created_at', 'desc')
->addAttributeToSort('created_at', 'desc')
->addFinalPrice()
->addStoreFilter()
->setPageSize($this->getProductsLimit())
->setCurPage($page)
->addAttributeToFilter('status', 1)
->addUrlRewrite();
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($this->_productCollection);  
Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($this->_productCollection);

$checkedProducts = new Varien_Data_Collection();
foreach ($this->_productCollection as $k => $p) {
$p = $p->loadParentProductIds();
$parentIds = $p->getData('parent_product_ids');
if (is_array($parentIds) && !empty($parentIds)) {
if (!$checkedProducts->getItemById($parentIds[0])) {
$parentProduct = Mage::getModel('catalog/product')->setStoreId($storeId)->load($parentIds[0]);
if ($parentProduct->isVisibleInCatalog()) {
$checkedProducts->addItem($parentProduct);
}
}
} else {
if (!$checkedProducts->getItemById($k)) {
$checkedProducts->addItem($p);
}
}
if (count($checkedProducts) >= $this->getProductsLimit()) {
break;
}
}

return$this->_productCollection;

}  

}

//////////////////////////////

我的猜测是,您的问题与逻辑中不包含分层导航有关。您已经重写了_getProductCollection()方法并直接实例化了集合,而不是通常从Mage_Catalog_Model_Layer注入集合的方式。您将不得不将该功能重新整合到您的新方法中。

$params = $this->getRequest()->getParams();
$dir = (!empty($params['dir'])) ? $params['dir'] : 'desc';   
$order = (!empty($params['order']) && $params['order'] != 'position') ? $params['order'] : 'created_at';
//modify collection method:
->addAttributeToSort($order, $dir)

最新更新