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

基本上我需要从同一个类中的'customer/customer_collection'和'sales/order_grid_collection'中提取数据,这可能吗?
要获得订单中的所有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进行搜索功能所需的条件.
| 归档时间: |
|
| 查看次数: |
3092 次 |
| 最近记录: |