2012-01-06 95 views
5

मैं Magento संस्करण 1.4 के साथ काम कर रहा हूं और मैंने बिक्री ऑर्डर ग्रिड में अतिरिक्त ग्रिड कॉलम (नाम और स्कस) जोड़ा है, लौटाया गया डेटा सही है लेकिन मैं ' मीटर पृष्ठांकन और अभिलेखों की कुल संख्या, इस प्रकार मेरी कोड के साथ समस्या हो:मैगेंटो सेल्स ऑर्डर ग्रिड नाम और स्कस कॉलम जोड़े गए रिकॉर्ड की गलत संख्या दिखाता है

सबसे पहले मैं संपादित 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(); 
} 

तब मैं सही परिणाम देने के लिए इस विधि को ओवरराइड जब नामों से फिल्टर या 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); 
} 

तब मैं Mage_Sales_Model_Mysql4_Order_Collection वर्ग

public function getSelectCountSql() 
{ 
    $countSelect = parent::getSelectCountSql(); 

    //added 
    $countSelect->reset(Zend_Db_Select::HAVING); 
    //end 

    $countSelect->resetJoinLeft(); 
    return $countSelect; 
} 

कोई आइडिया कैसे मैं पंक्तियों की संख्या की गणना कर सकते में इस विधि getSelectCountSql() संपादित? अग्रिम में धन्यवाद।

उत्तर

0

मैं इस मुद्दे था और मुझे मिल गया यह मैं

public function getSize() 
{ 
    $select = clone $this->getSelect(); 
    $select->reset(); 
    $select = $this->getConnection()->fetchOne('SELECT COUNT(*) FROM Table GROUP BY FIELD'); // or you can use select count(distinct field) from table 
    return $select; 
} 

उपयोग कर रहा हूँ और भंडारण मैं ग्रिड को प्राप्त करने के संग्रह में कस्टम getSize() फ़ंक्शन को लागू करने से काम कर रहा है ओवरराइड

protected function _setCollectionOrder($column) 
    { 
     $collection = $this->getCollection(); 
     if ($collection) { 
      $columnIndex = $column->getFilterIndex() ? 
       $column->getFilterIndex() : $column->getIndex(); 
      $collection->getSelect()->order(array($columnIndex.' '.$column->getDir())); 
     } 
     return $this; 
    } 

और कॉलम के फ़िल्टर_इंडेक्स को

in _prepareColumns() function 
    'filter_index' => 'SUM(tablename.field)' 

और आप कॉलबैक फ़ंक्शन का उपयोग एफ पर कर सकते हैं कॉलम

+0

जेम्स ' समाधान निश्चित रूप से बेहतर है, Meabed की getSize के पुनर्लेखन बाध्यकारी के नुकसान को ट्रिगर कर सकते हैं। मैंने एक "समूह द्वारा" खंड के साथ एक जटिल संग्रह लागू किया और "गिनती = 1" बग से मुलाकात की। '$ CountSelect-> रीसेट (Zend_Db_Select :: GROUP) जोड़ना; 'प्राप्त करने के लिए चयन करें CountSql ने एक साफ तरीके से चाल की है। – SMASHED

4

के लिए ilters हो सकता है कि इसके थोड़ी देर हो चुकी है, लेकिन अपने कोड में ग्रुप का उपयोग कर आजमा कर के insted रहे हैं:

$countSelect->reset(Zend_Db_Select::GROUP); 

क्योंकि आप इस statemen उपयोग कर रहे हैं:

$collection->getSelect()->group('entity_id'); 
+0

लेकिन यह दिखाई देने के लिए Mage_Sales_Model_Mysql4_Order_Collection के बजाय Mage_Sales_Model_Resource_Order_Collection में परिवर्तन की अपेक्षा कर रहा है। क्या आप कृपया मुझे समझा सकते हैं? – RIK

2
$collection->getSelect()->join(array(
      'item'=>$collection->getTable('sales/order_item')), 
      'item.order_id=`main_table`.entity_id AND item.product_type="simple"', 
      array(
       'skus' => new Zend_Db_Expr('group_concat(item.sku SEPARATOR ", ")'), 
       'name' => new Zend_Db_Expr('group_concat(item.name SEPARATOR ", ")') 
      )); 

$this->addColumn('skus', array(
      'header' => Mage::helper('sales')->__('SKU'), 
      'index' => 'skus', 
      'type' => 'text', 
     )); 

     $this->addColumn('name', array(
      'header' => Mage::helper('sales')->__('NAME'), 
      'index' => 'name', 
      'type' => 'text' 
     )); 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^