Magento订单网格:按订单检索数量和产品

时间:2015-11-02 14:46:31

标签: magento grid export

我正在尝试编辑订单网格,以便我可以将数据导出到XML,每行销售的每件商品的数量。 现在我只能访问订单的总金额,这是不够的。我想在订单视图>中构建一个包含每个订单可用信息的网格。信息>订购商品。

这可以用几行代码吗?

以下是我现在所做的事情:

我尝试在Grid.php的_prepareColumns()函数中手动添加列。

基本上,我尝试添加数量列:

$this->addColumn('total_qty_ordered', array(
        'header' => Mage::helper('sales')->__('Qty'),
        'index' => 'total_qty_ordered',
        'filter_index' => 'sales_flat_order.total_qty_ordered',
        ));

但是我没有得到任何总量,当然我没有得到每个订单中的产品分割。我真的不知道在哪里实施这个产品拆分。

先谢谢。

编辑:

这要归功于扩展

Order grid

但是,我无法导出此产品拆分,因为最后一列是一种嵌入式'其他信息。所以我在XML中得到一个空列。

2 个答案:

答案 0 :(得分:0)

我通常不建议使用扩展程序 - 我相信大多数扩展程序可能比它们的价值更麻烦,但在这种情况下,我建议使用扩展程序:

http://www.magentocommerce.com/magento-connect/enhanced-admin-grids-editor.html

它是免费的 - 代码相当简洁,您可以通过单击订单页面上的网格自定义按钮,单击更多选项,然后找到项目下拉列表并添加这些列来添加它。将显示给您所有项目的表格。

如果您想发布自己编写自定义方式的代码,我也可以帮您定制这些代码来完成这项工作。

答案 1 :(得分:0)

我们发布了一篇关于如何将任何数据添加到订单网格的完整博客文章。希望对你有帮助! https://grafzahl-io.blogspot.de/2016/11/how-to-display-m2e-order-data-or.html

因此,解决方案是将销售网格块复制到本地模块并添加您的列,如下例所示:

$this->addColumn('order_type', array(
    'header' => Mage::helper('sales')->__('Order Type'),
    'width' => '100px',
    'align' => 'left',
    'index' => 'order_type',
    'renderer' => 'yourmodule/adminhtml_sales_grid_renderer_m2eAttribute',
    'filter_condition_callback' => array($this, '_filterM2eConditionCallback')
)); 

filter_condition_callback是网格块中的一种方法。您可以在命名空间中看到渲染器是另一个类。在渲染器中,您可以定义列中显示的内容。 filter_condition_callback定义了网格应该如何操作,以防有人按您的自定义列进行过滤。

看起来像这样:

/**
 * filter callback to find the order_type
 * of orders through m2e (amazon, ebay, ...)
 *
 * @param object $collection
 * @param object $column


* @return Yourname_Yourmodule_Block_Adminhtml_Sales_Order_Grid
 */
public function _filterM2eConditionCallback($collection, $column) {
    if (!$value = $column->getFilter()->getValue()) {
        return $this;
    }
    if (!empty($value) && strtolower($value) != 'magento') {
        $this->getCollection()->getSelect()
            // join to the m2mepro order table and select component_mode
            ->join(
                'm2epro_order',
                'main_table.entity_id=m2epro_order.magento_order_id',
                array('component_mode')
                )
            ->where(
             'm2epro_order.component_mode = "' . strtolower($value) . '"');
    } elseif(strtolower($value) == 'magento') {
        $this->getCollection()->getSelect()
            ->join(
                'm2epro_order',
                'main_table.entity_id=m2epro_order.magento_order_id',
                array('component_mode')
                )
            ->where(
             'm2epro_order.component_mode = NULL');
    }

    return $this;
}

如您所见,有两个连接来收集我们需要过滤的数据。

这是渲染器的外观,它将在网格中显示数据:

class Yourname_Yourmodule_Block_Adminhtml_Sales_Grid_Renderer_M2eAttribute
extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
public function render(Varien_Object $row)
{
    // do whatever you need, to display your data
    // get the id of the row order data
    $orderId = $row->getEntityId();
    // get the related m2e order data
    $orders = Mage::getModel('M2ePro/Order')
        ->getCollection()
        ->addFieldToSelect('component_mode')
        ->addFieldToFilter('magento_order_id', $orderId);

    if($orders) {
        $data = $orders->getFirstItem()->getData();
        if(isset($data['component_mode'])) {
            return ucfirst($data['component_mode']);
        }
    }
    // return the string "magento" if there is no m2e relation
    return 'Magento';
}
}

链接将显示其他示例,如何在订单网格中显示数据。