magento adminで特定の製品(これはレポートグリッドではありません)の注文グリッドを使用する新しいモジュールを作成しています。そのための新しい注文グリッドを正常に作成しますが、販売のように、製品の合計価格を最後に取得したい>レポート。
画像をご覧ください
どんな助けでも感謝します、ありがとう
magento adminで特定の製品(これはレポートグリッドではありません)の注文グリッドを使用する新しいモジュールを作成しています。そのための新しい注文グリッドを正常に作成しますが、販売のように、製品の合計価格を最後に取得したい>レポート。
画像をご覧ください
どんな助けでも感謝します、ありがとう
回答:
1.簡単な方法で、これらのフィールドをグリッドクラスに追加してください、私のものを見てください:
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
*/
}
私の結果
2.Magentoレポートの使用:(ただし、これは非常に複雑です)
レポートグリッドを作成する必要があります。Mage_Adminhtml_Block_Report_Customer_Orders_Grid
レポートグリッドを参照して、独自の要素を挿入してみてください。カスタムレポートについてのすばらしいヒントを以下に示し
ます。http://codegento.com/2011/03/creating-custom-magento-reports
http://www.summasolutions.net/blogposts/custom-reports-magento
mageUzの答えは本当に良くてシンプルです。
合計行に表示される「アクション」列に問題があったので、もう少し詳しく調べました。だからここに...
1.合計などでアクション列を非表示にする
おそらくのためのバグのパラメータは、それが合計行でのアクションリンクを示して、検討の下で撮影されていません。これを解決するに は、アクション列宣言を追加 します。widget/grid.phtml
'is_system'
'totals_label' => '',
'totals_label' => 'label',
パラメータは、すべての列に使用することができ、それはそれはセットの場合でも、合計セルを上書きします。
つまり$fields['entity_id']='Totals';
、mageUzの回答の行を省略して、 'entity_id'列(または選択した任意の列)に移動して、
'totals_label' => $this->__('Total'),
(+多言語サポート)
2.同じ結果、わずかに異なるアプローチ
グリッドブロックに、保護された関数_prepareTotals($ columns)を追加します。次に、必要な行を合計コンマ区切りで_prepareCollection()関数で呼び出します。より明確にするために、Whatever / Grid.phpは次のようになります。
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();
}
Yiorgos Moschovitisの回答は有効です(Magento v1.5.1)。これにより、合計はすべての行の合計になります。設定されたフィルターは無視されます。
変更が必要な鍵はprepareTotals
、parent::_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;
}
残りのコードは同じです。
1つの欠点は、行の合計が現在表示されているページに制限されることです。