Cách thêm một hàng Tổng trong lưới magento


7

Tôi đang tạo một mô-đun mới sử dụng lưới đặt hàng cho một sản phẩm cụ thể (đây không phải là lưới báo cáo) trong quản trị viên magento tôi đã tạo thành công lưới đơn hàng mới cho điều đó nhưng tôi muốn nhận được tổng giá cho sản phẩm vào cuối, như trong bán hàng > báo cáo.

Xin vui lòng xem hình ảnh

Hình ảnh

Bất kỳ trợ giúp sẽ được đánh giá cao ,, Cảm ơn


Tôi hoàn toàn không hiểu bạn đang cố gắng đạt được điều gì, nhưng như một điểm khởi đầu tốt, bạn có thể xem Mage_Adminhtml_Block_Report_ Productt_Grid :: _ afterLoadCollection (). Trên dòng 58 (Magento 1.7.0.2 CE) phương thức này khởi tạo và điền vào Mage_Reports_Model_Totals (). Hãy nhìn vào lớp học này. Đồng thời kiểm tra bài viết Magestore này về tổng số mô hình: blog.magestore.com/2012/09/07/ trên
Evgeni Ivanov

Xin chào @Keyur shah bạn đã làm gì với điều này chưa? Bạn có thể vui lòng trả lời NÀY làm thế nào tôi có thể thêm tổng số vào cuối lưới không?
Zaheerabbas

@Freedom tôi đang đạt được điều này. bạn có thể thêm tổng số bằng cách sử dụng ghi đè doanh số / lưới.php và thêm mã bên dưới bằng mazeUz
Keyur Shah

Cảm ơn đã nhận nó. Nhưng nó không hiển thị tiêu đề 'Tổng số' như được thấy trên hình ảnh bên dưới thay vào đó nó hiển thị hộp kiểm. Có đáp ứng bất kỳ thay đổi nào trong mã không?
Zaheerabbas

@Freedom bạn có thể vui lòng kiểm tra câu trả lời của tôi không?
Keyur Shah

Câu trả lời:


10

1. Cách đơn giản, thêm các trường này vào lớp gird của bạn, xem phần của tôi:

class SSD_Uzkart_Block_Adminhtml_Uzkart_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
    protected $_countTotals = true;

    public function getTotals()
    {
        $totals = new Varien_Object();
        $fields = array(
            'uzkart_trans_amount' => 0, //actual column index, see _prepareColumns()
            'some_summarable_field' => 0,
            'another_countable_field' => 0,
        );
        foreach ($this->getCollection() as $item) {
            foreach($fields as $field=>$value){
                $fields[$field]+=$item->getData($field);
            }
        }
        //First column in the grid
        $fields['entity_id']='Totals';
        $totals->setData($fields);
        return $totals;
    }

    protected function _prepareColumns()
    {
        /**
         * another columns
         */

        $this->addColumn('uzkart_trans_amount', array(
            'header' => Mage::helper('uzkart')->__('Payment Amount'),
            'index' => 'uzkart_trans_amount',
            'type' => 'currency',
        ));

        /**
         * another columns
         */
    }

    /**
     * another methods
     */

}

Kết quả của tôi nhập mô tả hình ảnh ở đây

2.Sử dụng Báo cáo Magento: (Nhưng cái này quá phức tạp)
Bạn nên tạo lưới báo cáo. Xem Mage_Adminhtml_Block_Report_Customer_Orders_Gridlưới báo cáo và cố gắng để thúc đẩy riêng. Dưới đây là những thông tin tuyệt vời về báo cáo tùy chỉnh:
http://codegento.com/2011/03/creating-custom-magento-reports
http://www.summasolutions.net/blogposts/custom-reports-magento


cảm ơn câu trả lời của bạn, nó giúp tôi rất nhiều +1 cho nó @mageUz
Keyur Shah

bùng nổ Cuối cùng, nó hoạt động hoàn hảo, cảm ơn bạn rất nhiều @mageUz
Keyur Shah

Xin chào Tôi đã sử dụng mã này nhưng không thể lấy từ TOTAL được mô tả khi lưới được xuất sang CSV.
Milople Inc ngày 20/8/2015

Xin chào, Điều này hiệu quả với tôi nhưng tôi không thể có được tổng số cột đang sử dụng Trình kết xuất.
Yogita

7

Câu trả lời của mageUz thực sự tốt và đơn giản.

Tôi đã gặp một số vấn đề với cột "hành động" hiển thị theo hàng tổng nên tôi đã xem xét thêm một chút. Vì vậy, đây là ...

1. Ẩn Cột Hành động theo tổng số và hơn thế nữa

Do có thể là một lỗi trong widget/grid.phtmlcác 'is_system'tham số không lấy được xem xét, vì vậy nó cho thấy các liên kết hành động trong hàng tổng. Để giải quyết nó, chỉ cần thêm 'totals_label' => '', vào khai báo cột hành động của bạn.

Các 'totals_label' => 'label',tham số có thể được sử dụng trong tất cả các cột và nó sẽ ghi đè lên tổng số tế bào ngay cả khi nó đề ra.

Điều đó nói rằng bạn có thể bỏ qua $fields['entity_id']='Totals';dòng câu trả lời của mageUz, đi đến cột 'entity_id' (hoặc bất kỳ cột nào bạn chọn) và thêm

'totals_label' => $this->__('Total'), (+ Hỗ trợ đa ngôn ngữ)

2. Kết quả tương tự, cách tiếp cận hơi khác nhau

Trong khối lưới của bạn, thêm chức năng được bảo vệ _prepareTotals (cột $). Sau đó gọi nó trong hàm _prepareCollection () với các hàng bạn muốn dưới dạng tổng dấu phẩy được phân tách. Để rõ ràng hơn, Any / Grid.php của bạn sẽ trông giống như thế này

protected function _prepareCollection(){
  $collection = Mage::getResourceModel('mymodule/mymodel_collection');
  $this->setCollection($collection);
  $this->_prepareTotals('price,special_price'); //Add this Line with all the columns you want to have in totals bar
  return parent::_prepareCollection();
}

//Add following function
protected function _prepareTotals($columns = null){
  $columns=explode(',',$columns);
  if(!$columns){
    return;
  }
  $this->_countTotals = true;   
  $totals = new Varien_Object();
  $fields = array();
  foreach($columns as $column){
    $fields[$column]    = 0;    
  } 
  foreach ($this->getCollection() as $item) {
    foreach($fields as $field=>$value){
      $fields[$field]+=$item->getData($field);
    }
  }
  $totals->setData($fields);
  $this->setTotals($totals);
  return;
}

protected function _prepareColumns(){
  $this->addColumn('entity_id', array(
    'index'             => 'entity_id',
    'header'            => $this->__('ID'),
    'totals_label'      => $this->__('Total'), //Add this line to show "Total" in the beginning of the row
  ));

  $this->addColumn('name', array(
    'index'             => 'name',
    'header'            => $this->__('Name'),
  ));

  $this->addColumn('price', array(
    'index'             => 'price',
    'header'            => $this->__('Price'),
    'type'              => 'currency',
    'currency_code'     => $this->_getStore()->getBaseCurrency()->getCode(),
  ));

  $this->addColumn('special_price', array(
    'index'             => 'special_price',
    'header'            => $this->__('Special Price'),
    'type'              => 'currency',
    'currency_code'     => $this->_getStore()->getBaseCurrency()->getCode(),
  ));

  $this->addColumn('action',array(
    'header'        => $this->__('Action'),
    'width'         => '100',
    'type'          => 'action',
    'getter'        => 'getId',
    'actions'       => array(array(
                          'caption' => $this->__('edit'),
                          'url'     => array('base' => '*/*/edit'),
                          'field'       => 'product_id',
                      )),
    'filter'        => false,
    'sortable'      => false,
    'is_system'     => true,
    'totals_label'      => '' //Add this line to stop the action showing 
  ));
  return parent::_prepareColumns();
}

Sử dụng phương pháp này, có vẻ như tổng số từ tệp CSV đã xuất không chứa đúng dữ liệu. Những gì nên có trong tổng hàng là từ hàng đầu tiên từ lưới.
Denisa

-1

Tuy nhiên , câu trả lời của Yiorgos Moschovitis hoạt động (Magento v1.5.1) điều này dẫn đến tổng số là TẤT CẢ các hàng. Nó bỏ qua các bộ lọc được thiết lập.

thay đổi quan trọng cần thiết là đặt prepareTotalsSAUparent::_prepareCollection()

protected function _prepareCollection(){
  $collection = Mage::getResourceModel('mymodule/mymodel_collection');
  $this->setCollection($collection);
  $returnVal = parent::_prepareCollection();
  //the above line will alter the collection by adding the appropriate filters to the resource model
  $this->_prepareTotals('price,special_price'); //Add this Line with all the columns you want to have in totals bar
  return $returnVal;
}

Phần còn lại của mã là như nhau.

Một nhược điểm là tổng số hàng được giới hạn trong trang hiện đang hiển thị.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.