Pracuję z wersją 1.4 Magento i dodałem dodatkowe kolumny siatki (nazwy i skróty) do siatki zamówień sprzedaży, zwrócone dane są poprawne, ale ja ' m problemy z paginacji i całkowitej liczby rekordów, mój kod następująco:Siatka zamówień sprzedaży Magento pokazuje niepoprawną liczbę rekordów dodanych do nazw i kolumn Skusa
Pierwszy edytowany 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();
}
Potem zastąpić tę metodę, aby powrócić poprawne wyniki, gdy filtr o nazwach lub SKU
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);
}
Potem edytowany tej metody getSelectCountSql() w klasie Mage_Sales_Model_Mysql4_Order_Collection
public function getSelectCountSql()
{
$countSelect = parent::getSelectCountSql();
//added
$countSelect->reset(Zend_Db_Select::HAVING);
//end
$countSelect->resetJoinLeft();
return $countSelect;
}
jakiś pomysł jak mogę obliczyć liczbę wierszy? Z góry dziękuję.
Jamesa rozwiązanie jest zdecydowanie lepsze, przeróbka getSize przez Meabed może spowodować utratę wiązania. Zaimplementowałem złożoną kolekcję z klauzulą "grupa po" i spotkałem się z błędem "count = 1". Dodanie '$ countSelect-> reset (Zend_Db_Select :: GROUP);' to getSelectCountSql wykonało sztuczkę w czysty sposób. – SMASHED