添加SKU列Magento管理员销售>订单

use*_*080 1 php magento

我设法得到了我想要显示的字段,但是我无法提取数据,例如SKU数据应来自目录>管理产品.

使用的Magento版本是1.5.1.0

在此输入图像描述 在此输入图像描述

基本上我需要从同一个类中的'customer/customer_collection'和'sales/order_grid_collection'中提取数据,这可能吗?

sea*_*den 5

要获得订单中的所有Skus,您可以使用frame_callback在单独的函数中查找Skus以获取订单.

_prepareColumns()Sku专栏的功能中:

...

$this->addColumn('increment_id', array(
                 'header' => Mage::helper('sales')->__('SKU'),
                 'index' => 'increment_id',
                 'frame_callback' => array($this, 'callback_skus')
));
Run Code Online (Sandbox Code Playgroud)

...

然后在你的某处添加这个新功能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;
}
Run Code Online (Sandbox Code Playgroud)

这将返回订单的所有Skus,而不需要很多复杂的连接.


编辑 - 答案的第二部分

要启用上述搜索/过滤,您需要更新_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();
}
Run Code Online (Sandbox Code Playgroud)

添加一个名为的新函数filter_skus():

public function filter_skus($collection, $column) {
   if (!$value = $column->getFilter()->getValue()) {
        return $this;
    }

    $this->getCollection()->getSelect()->where(
        "sku like ?"
    , "%$value%");

    return $this;

}
Run Code Online (Sandbox Code Playgroud)

并像这样更新addColumnfor 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'),
));
Run Code Online (Sandbox Code Playgroud)

...

请注意,filter_condition_callback对此的新调用会添加where进行搜索功能所需的条件.