Estoy trabajando con Magento versión 1.4 y agregué columnas de cuadrícula adicionales (nombres y skus) a Grid de pedidos de ventas, los datos devueltos son correctos pero I ' Estoy teniendo problemas con la paginación y el número total de registros, el código de la siguiente manera:Magento Sales Order Grid muestra un número incorrecto de registros cuando se agregaron Nombres y columnas de Skus
primero Editado 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();
}
Entonces puedo reemplazar este método para devolver resultados correctos cuando el filtro por nombres o skus
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);
}
Entonces editado este método getSelectCountSql() en la clase Mage_Sales_Model_Mysql4_Order_Collection
public function getSelectCountSql()
{
$countSelect = parent::getSelectCountSql();
//added
$countSelect->reset(Zend_Db_Select::HAVING);
//end
$countSelect->resetJoinLeft();
return $countSelect;
}
alguna idea de cómo puedo calcular el número de filas? Gracias por adelantado.
James' La solución es definitivamente mejor, la reescritura de getSize de Meabed puede desencadenar la pérdida del enlace. Implementé una colección compleja con una cláusula "group by" y cumplí el error "count = 1". Agregar '$ countSelect-> reset (Zend_Db_Select :: GROUP);' a getSelectCountSql hizo el truco de una manera limpia. – SMASHED