Tôi đang làm việc với Magento phiên bản 1.4 và tôi đã thêm cột lưới (tên và skus) vào Lưới đặt hàng, dữ liệu trả về là chính xác nhưng tôi ' m gặp vấn đề với pagination và tổng số lượng hồ sơ, mã của tôi như sau:Lưới bán hàng Magento hiển thị số lượng bản ghi không chính xác khi thêm cột Tên và Skus
Trước tiên tôi Edited Mage_Adminhtml_Block_Sales_Order_Grid
protected function _prepareCollection()
{
$collection = Mage::getResourceModel($this->_getCollectionClass())
->join(
'sales/order_item',
'`sales/order_item`.order_id=`main_table`.entity_id',
array(
'skus' => new Zend_Db_Expr('group_concat(`sales/order_item`.sku SEPARATOR ", ")'),
'names' => new Zend_Db_Expr('group_concat(`sales/order_item`.name SEPARATOR ", ")'),
)
);
$collection->getSelect()->group('entity_id');
$this->setCollection($collection);
return parent::_prepareCollection();
}
Sau đó, tôi ghi đè phương pháp này để đưa ra kết quả chính xác khi lọc theo tên hoặc dòng sản phẩm
protected function _addColumnFilterToCollection($column)
{
if($this->getCollection() && $column->getFilter()->getValue())
{
if($column->getId() == 'skus'){
$this->getCollection()->join(
'sales/order_item',
'`sales/order_item`.order_id=`main_table`.entity_id',
array(
'skus' => new Zend_Db_Expr('group_concat(`sales/order_item`.sku SEPARATOR ", ")'),
)
)->getSelect()
->having('find_in_set(?, skus)', $column->getFilter()->getValue());
return $this;
}
if($column->getId() == 'names'){
$this->getCollection()->join(
'sales/order_item',
'`sales/order_item`.order_id=`main_table`.entity_id',
array(
'names' => new Zend_Db_Expr('group_concat(`sales/order_item`.name SEPARATOR ", ")'),
)
)->getSelect()
->having('find_in_set(?, names)', $column->getFilter()->getValue());
return $this;
}
}
return parent::_addColumnFilterToCollection($column);
}
Sau đó, tôi thay đổi nội dung phương pháp này getSelectCountSql() trong lớp Mage_Sales_Model_Mysql4_Order_Collection
public function getSelectCountSql()
{
$countSelect = parent::getSelectCountSql();
//added
$countSelect->reset(Zend_Db_Select::HAVING);
//end
$countSelect->resetJoinLeft();
return $countSelect;
}
Bất cứ ý tưởng làm thế nào tôi có thể tính toán số lượng hàng? Cảm ơn trước.
James' giải pháp chắc chắn là tốt hơn, việc viết lại getSize của Meabed có thể kích hoạt sự mất liên kết. Tôi đã triển khai một bộ sưu tập phức tạp với mệnh đề "nhóm theo" và gặp lỗi "count = 1". Thêm '$ countSelect-> reset (Zend_Db_Select :: GROUP);' để getSelectCountSql thực hiện thủ thuật một cách rõ ràng. – SMASHED