2013-06-18 115 views
1

我想按类别过滤网格而无需添加类别列,有没有一种方法可以做到这一点自定义过滤网格。magento管理产品网格添加类别过滤器管理网格不添加列

下面

是我做的

function prepareCollection() 
{ 
$catIdArray = getRequest()->getParam('cat_id'); 
//i.e $catIdArray = array(26, 27, 17); 

$collection = Mage::getModel('catalog/product')->getCollection(); 

$collection->joinField(
    'category_id', 
    'catalog/category_product', 
    'category_id', 
    'product_id=entity_id', 
    null, 
    'left' 
) 
->addAttributeToFilter( 
    'category_id', 
    array('in' => $catIdArray) 
) 
->addAttributeToSelect('*'); 
$this->setCollection($collection); 

这里过滤器工作正常,但分页不会在这种情况下工作。请告诉我我做错了什么?

回答

1

为了在扩展Magento后台的网格后修复分页,您需要扩展lib/Varien/Data/Collection/Db.php

复制db.php中的路径应用程序/代码/本地/瓦瑞恩/数据/收藏/ db.php中,并与下面的替换功能getSelectCountSql: -

public function getSelectCountSql() 
{ 
    $this->_renderFilters(); 
    $countSelect = clone $this->getSelect(); 
    $countSelect->reset(Zend_Db_Select::ORDER); 
    $countSelect->reset(Zend_Db_Select::LIMIT_COUNT); 
    $countSelect->reset(Zend_Db_Select::LIMIT_OFFSET); 
    $countSelect->reset(Zend_Db_Select::COLUMNS); 

    // Count doesn't work with group by columns keep the group by 
    if(count($this->getSelect()->getPart(Zend_Db_Select::GROUP)) > 0) { 
     $countSelect->reset(Zend_Db_Select::GROUP); 
     $countSelect->distinct(true); 
     $group = $this->getSelect()->getPart(Zend_Db_Select::GROUP); 
     $countSelect->columns("COUNT(DISTINCT ".implode(", ", $group).")"); 
    } else { 
     $countSelect->columns('COUNT(*)'); 
    } 
    return $countSelect; 
} 
相关问题