表示したいフィールドを取得できましたが、データを取得できません。たとえば、SKU データはカタログから取得する必要があります > 製品の管理.
使用中の Magento のバージョンは 1.5.1.0 です
基本的に、同じクラスの「customer/customer_collection」と「sales/order_grid_collection」からデータを取得する必要がありますが、可能ですか?
すべてのSkuを注文に入れるにframe_callback
は、別の関数で注文のSkuを検索するために使用できます。
_prepareColumns()
Sku列の関数:
..。
$this->addColumn('increment_id', array(
'header' => Mage::helper('sales')->__('SKU'),
'index' => 'increment_id',
'frame_callback' => array($this, 'callback_skus')
));
..。
次に、この新しい関数をのどこかに追加しますGrid.php
。
public function callback_skus($value, $row, $column, $isExport) {
$increment_id = $value;
$_order = Mage::getModel('sales/order')->loadByIncrementId($increment_id);
$_items = $_order->getAllItems();
$skus="";
foreach ($_items as $item) {
$skus .= $item->getSku()."<br/>";
}
return $skus;
}
これにより、多くの複雑な結合なしで、注文のすべてのSkuが返されます。
編集-答えの2番目の部分
上記の検索/フィルタリングを有効にするには_prepareCollection()
、を次のように更新する必要があります。
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 ",")'),
)
);
$collection->getSelect()->group('entity_id');
$this->setCollection($collection);
return parent::_prepareCollection();
}
と呼ばれる新しい関数を追加しますfilter_skus()
:
public function filter_skus($collection, $column) {
if (!$value = $column->getFilter()->getValue()) {
return $this;
}
$this->getCollection()->getSelect()->where(
"sku like ?"
, "%$value%");
return $this;
}
次のようにを更新しaddColumn
ますsku
。
..。
$this->addColumn('sku', array(
'header' => Mage::helper('sales')->__('SKU'),
'index' => 'increment_id',
'frame_callback' => array($this, 'callback_skus'),
'filter_condition_callback' => array($this, 'filter_skus'),
));
..。
検索機能を作成するために必要な条件filter_condition_callback
を追加する新しい呼び出しに注意してください。where
注: Magento のコア機能をオーバーライドしないように、独自のモジュールを作成し、Grid.php で以下のコードを使用できます。
app\code\core\Mage\Adminhtml\Block\Sales\Order\Grid.php を開きます
以下の関数を置き換えます
protected function _prepareCollection()
{
$collection = Mage::getResourceModel($this->_getCollectionClass());
$collection->getSelect()->joinLeft(
'sales_flat_order_item',
'`sales_flat_order_item`.order_id=`main_table`.entity_id',
array('skus' => new Zend_Db_Expr('group_concat(`sales_flat_order_item`.sku SEPARATOR ",")'))
);
$collection->getSelect()->group('entity_id');
$this->setCollection($collection);
return parent::_prepareCollection();
}
以下のコードを _prepareColumns() 関数に入れます
$this->addColumn('sku', array(
'header' => Mage::helper('sales')->__('SKU'),
'index' => 'skus',
'type' => 'text',
'width' => '100px',
'filter' => false,
));
ソース: http://chandreshrana.blogspot.in/2016/12/how-to-add-sku-column-in-sales-order.html