Magento $ _collection自定义排序新问题

时间:2013-06-18 18:43:47

标签: magento


我正在加载我的集合,在自定义list.phtml里面加载扩展

    $_productCollection=$this->getLoadedProductCollection();
        $_helper = $this->helper('catalog/output');
        $listHelper = Mage::helper('customodule);

?>
<?php if(!$_productCollection->count()): ?>

我怎么能用这种方法调用集合中的排序?

我知道如何使用其他方法,但我需要使用第1个 其他方法:

<?php  $todayDate  = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);

$_productCollection = Mage::getModel('catalog/product')

                    ->getCollection()
                    ->addCategoryFilter(Mage::getModel('catalog/category')->load(4))
                    ->addAttributeToFilter('news_from_date', array('date' => true, 'to' => $todayDate))
                    ->addAttributeToFilter('news_to_date', array('or'=> array(
                        0 => array('date' => true, 'from' => $todayDate),
                        1 => array('is' => new Zend_Db_Expr('null')))
                    ), 'left')
                    ->addAttributeToSort('news_from_date', 'desc')
                    ->addAttributeToSelect(array('name','url','small_image','price'))
                        ->setPage(1, 10) 
                    ->addAttributeToSort('created_at', 'desc')


                   ?>

<?php if(!$_productCollection->count()): ?>

1 个答案:

答案 0 :(得分:0)

假设Mage_Catalog_Product_List::getLoadedProductCollection()用于第一个集合,而不是这两个集合之间的差异,第一个集合通常会已经加载了它的产品,所以尝试SQL过滤/排序后会很漂亮没有意义的。

在标准Magento中,此方法的调用堆栈大致如下所示:

Mage_Catalog_Product_List::getLoadedProductCollection()
Mage_Catalog_Product_List::_getProductCollection()
Mage_Catalog_Model_Layer::getProductCollection()

这意味着,如果要以您希望的方式更改SQL过滤/排序,则需要覆盖Mage_Catalog_Model_Layer::getProductCollection()

或者您也可以先将您的集合放入某个数组中,然后使用PHP对其进行排序。