カスタムグリッド列を受注グリッドに追加します。
Magentoはデータベーステーブルsales_flat_orderを使用して、受注グリッドの値を入力します。残念ながら、sales_flat_orderテーブルでは、必要な情報(払い戻し額から払い戻し額を差し引いたもの)ではなく、両方の値を別々に(grand_totalとtotal_refunded)提供しています。
- がテーブル sales_flat_orderを拡張:そのため、あなたは複数のオプションがあります。
- カスタム受注グリッド列にカスタムレンダラーを追加します。
この世界のすべてにおいて、両方の方法には長所と短所があります。
sales_flat_orderテーブルを拡張する場合は、新しい注文を作成するときに新しいデータベース列の値が設定されていることを確認する必要があります。一方、値はデータベースに保持されているため、他の拡張機能の列を使用することができます。
カスタムレンダラでは、永続性を気にする必要はありません。オペレーションを行い、結果を返す機会があります。これは、カスタム受注グリッドの列に表示されます。 grand_totalとtotal_refundedの両方が既に保存されているので、払い戻し額を差し引いた額を返すことができます。
カスタム注文レンダリング列を追加し、grandtotalから払い戻し額を引いた値を返すカスタムレンダラーを追加する方法について説明します。
パート1:カスタム列をバックエンドの受注グリッドに追加するにはどうすればよいですか?最初に、独自の販売注文グリッドブロックXX_ModuleName_Block_Adminhtml_Order_Gridを追加し、販売注文のグリッドにカスタム列を追加するには
。
magentos ** Mage_Adminhtml_Block_Sales_Order_Grid *(app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php
)を書き直し、受注グリッドで延長してください。
カスタム列のオーバーライドを追加するには_prepareColumns()メソッド。上書きされた_prepareColumns()の中で、最初に親クラスの列を追加します。最後に、カスタム列を追加してください。
注:download the example moduleです。
$this->addColumn('my_column', array(
'header' => Mage::helper('sales')->__('My Column'),
'index' => 'my_column',
'type' => 'text',
'renderer' => 'XX_ModuleName_Block_Adminhtml_Order_Grid'
));
例など/ config.xmlに:
<?xml version="1.0"?>
<config>
<modules>
<EG_AdminSalesOrder>
<version>1.0.0</version>
</EG_AdminSalesOrder>
</modules>
<global>
<blocks>
<eg_adminsalesorder>
<class>EG_AdminSalesOrder_Block</class>
</eg_adminsalesorder>
<adminhtml>
<rewrite>
<sales_order_grid>EG_AdminSalesOrder_Block_Adminhtml_Order_Grid</sales_order_grid>
</rewrite>
</adminhtml>
</blocks>
<helpers>
<eg_adminsalesorder>
<class>EG_AdminSalesOrder_Helper</class>
</eg_adminsalesorder>
</helpers>
</global>
</config>
例カスタム販売注文グリッド・ブロック:
class EG_AdminSalesOrder_Block_Adminhtml_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid
{
/**
* Add custom column to sales order grid
*
* @return Mage_Adminhtml_Block_Widget_Grid
* @throws Exception
*/
protected function _prepareColumns()
{
$this->addColumn('real_order_id', array(
'header'=> Mage::helper('sales')->__('Order #'),
'width' => '80px',
'type' => 'text',
'index' => 'increment_id',
));
if (!Mage::app()->isSingleStoreMode()) {
$this->addColumn('store_id', array(
'header' => Mage::helper('sales')->__('Purchased From (Store)'),
'index' => 'store_id',
'type' => 'store',
'store_view'=> true,
'display_deleted' => true,
));
}
$this->addColumn('created_at', array(
'header' => Mage::helper('sales')->__('Purchased On'),
'index' => 'created_at',
'type' => 'datetime',
'width' => '100px',
));
$this->addColumn('billing_name', array(
'header' => Mage::helper('sales')->__('Bill to Name'),
'index' => 'billing_name',
));
$this->addColumn('shipping_name', array(
'header' => Mage::helper('sales')->__('Ship to Name'),
'index' => 'shipping_name',
));
$this->addColumn('base_grand_total', array(
'header' => Mage::helper('sales')->__('G.T. (Base)'),
'index' => 'base_grand_total',
'type' => 'currency',
'currency' => 'base_currency_code',
));
$this->addColumn('grand_total', array(
'header' => Mage::helper('sales')->__('G.T. (Purchased)'),
'index' => 'grand_total',
'type' => 'currency',
'currency' => 'order_currency_code',
));
$this->addColumn('refunded', array(
'header' => Mage::helper('sales')->__('Total - Refund'),
'index' => 'refunded',
'type' => 'text',
'renderer' => 'EG_AdminSalesOrder_Block_Adminhtml_Sales_Order_Grid_Widget_Renderer_Refunded'
));
parent::_prepareColumns();
}
}
パート2:用のカスタムレンダラを追加する方法私のカスタム列?
カスタムレンダラーを追加して、カスタム受注グリッド列に値を入力することができます。
最初に追加レンダラークラスXX_ModuleName_Block_Adminhtml_Sales_Order_Grid_Widget_Renderer_MyColumnを追加します。
Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract。
レンダリング(Varien_Object $ row)メソッドをオーバーライドします。ここでは、特定の操作を行い、グリッドに表示される文字列を返します。あなたの場合、現在の$行 paramのオーダーコレクションを読み込み、合計払い戻し金額を取得し、払い戻し金額で払い戻し金額を引いて値を返却したいとします。
例のカスタムレンダラブロック:
class EG_AdminSalesOrder_Block_Adminhtml_Sales_Order_Grid_Widget_Renderer_Refunded
extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
/**
* @param Varien_Object $row
* @return string
*/
public function render(Varien_Object $row)
{
$currentOrderId = $row->getId();
$currentOrderGrandTotal = $row->getGrandTotal();
$orderCollection = Mage::getModel('sales/order')->getCollection();
$orderCollection->addFieldToSelect('total_refunded');
$orderCollection->addFieldToFilter('entity_id', array('eq' => $currentOrderId));
$orderCollectionItem = $orderCollection->getFirstItem();
$refundedAmount = $orderCollectionItem->getTotalRefunded();
$grandTotalWithoutRefundedAmount = (float)$currentOrderGrandTotal - (float)$refundedAmount;
$grandTotalWithoutRefundedAmount = Mage::helper('core')->currency($grandTotalWithoutRefundedAmount);
return (string)$grandTotalWithoutRefundedAmount;
}
}
することができますdownload the example module。
独自のソリューションをコーディングしたいのですか、拡張機能を探していますか? – Enigmativity
@Enigmativityはどちらでもよいでしょう – Mike