0


我正在像这样加载我的集合,在将加载扩展的自定义 list.phtml 中

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

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

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

我知道如何用另一种方法做到这一点,但我需要使用第
一种其他方法:

<?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()): ?>
4

1 回答 1

0

假设Mage_Catalog_Product_List::getLoadedProductCollection()用于第一个集合,这两个集合之间的区别在于,第一个集合通常已经加载了它的产品,因此之后尝试对它们进行 SQL 过滤/排序将毫无意义。

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

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

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

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

于 2013-06-19T07:43:25.110 回答