公司名称订单网格列

时间:2014-07-01 18:24:40

标签: php magento grid block sales

所以,这是我在网站上发表的第一篇文章,但我过去从这个网站获得了很多知识,并期待学习更多知识。我绝对是一个新手,因为我和Magento一起自学成才,所以我很抱歉这个帖子有什么不对。

我正在制作Magento 1.8.1,主题包含在内。还涉及多个扩展,大多数扩展都是完全自定义的。

问题:我一直试图让公司名称出现在销售订单网格上一段时间,并且运气不错。

首先,我复制了: /core/Mage/Adminhtml/Block/Sales/Order/Grid.php -至- /local/Mage/Adminhtml/Block/Sales/Order/Grid.php

然后我将_prepareCollection()中的代码更新为:

    protected function _prepareCollection()
{
    $collection = Mage::getResourceModel($this->_getCollectionClass());
    $collection->getSelect()->join(
        array('addressTable' => 'sales_flat_order_address'),'main_table.entity_id = addressTable.parent_id AND addressTable.address_type = "billing"',array('billing_company'=>'company'));
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

将以下内容添加到_prepareColumns:

    $this->addColumn('company', array(
        'header' => Mage::helper('sales')->__('Bill to Company'),
        'index' => 'billing_company',
    ));

好的,到目前为止一切顺利。一切都按照应有的方式运作,直到我决定将船舶运送到公司真的很好,因为我们的大多数客户都在为其他公司购买。

为了实现这一点,我像以前一样添加了没有问题的列:

   $this->addColumn('company', array(
        'header' => Mage::helper('sales')->__('Ship to Company'),
        'index' => 'shipping_company',
    ));

该列添加没有问题,除了它不在我放的地方(在shipping_name之前),这只是添加列没有数据。

现在要添加数据,我会在_prepareCollection下添加另一个集合,因为与表格中的结算相比,发货信息位于不同的行上?像这样?:

    $collection->getSelect()->join(
        array('addressTable' => 'sales_flat_order_address'),'main_table.entity_id = addressTable.parent_id AND addressTable.address_type = "shipping"',array('shipping_company'=>'company'));

但是当我尝试这个时,我收到一个错误:You cannot define a correlation name 'addressTable' more than once

我在两列之间也有很多冲突。例如,当我没有在_prepareColumns下注释Ship to Company时,它会显示Ship to Company列,其中Bill to Company列应该是。列中也没有数据。一旦我评论向公司发送公司账单并且具有正确的数据。

基本上,我只需要显示Ship to Company Column以及Bill to Company Column。最好在相应名称旁边。

任何答案或帮助将不胜感激。

我已将公司列添加到客户网格并创建新订单客户网格也没有问题。

谢谢,

**编辑 **

嗯,我实际上已经弄清楚了,所以我想将我的解决方案发布到我的问题上,供其他人查看是否需要:

这是我更新的本地/ Mage / Adminhtml / Block / Sales / Order / Grid.php的代码:

    protected function _prepareCollection()
{
    $collection = Mage::getResourceModel($this->_getCollectionClass());
    $collection->getSelect()->join(array('addressTable' => 'sales_flat_order_address'),'main_table.entity_id = addressTable.parent_id AND addressTable.address_type = "billing"',array('billing_company'=>'company'));
    $collection->getSelect()->join(array('shipping'=>'sales_flat_order_address'),'main_table.entity_id=shipping.parent_id and shipping.address_type="shipping"',array('shipping_company'=>'company'));
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

要将列放在Ship to Name旁边,我必须使用addColumnAfter作为Ship to Company,因为它将它放在最右边。

    $this->addColumn('company', array(
        'header' => Mage::helper('sales')->__('Bill to Company'),
        'index' => 'billing_company',
        'filter index' => 'billing_company'
    ));

    $this->addColumnAfter('shipping_company', array(
        'header' => Mage::helper('sales')->__('Ship to Company'),
        'index' => 'shipping_company',
        'filter index' => 'shipping_company'
        ),
    'billing_name'
    );

瞧,一切都在发挥作用!

2 个答案:

答案 0 :(得分:8)

好的,我上面的编辑并不完全正确。列显示并填充正常但在尝试搜索字段后,我收到错误。经过更多的研究,我发现了这个解决方案:Using column aliases in Sales Order Grid field

这个问题的答案是完美的,只需改变一些小事。我在下面附上我的代码,以防其他人正在寻找这个解决方案。

    protected function _prepareCollection()
{
    $collection = Mage::getResourceModel($this->_getCollectionClass());
    $collection->getSelect()->join(array('address_billing' => $collection->getTable("sales/order_address")),'main_table.entity_id = address_billing.parent_id AND address_billing.address_type = "billing"',array('address_billing.company as billing_company'));
    $collection->getSelect()->join(array('address_shipping' => $collection->getTable("sales/order_address")),'main_table.entity_id = address_shipping.parent_id AND address_shipping.address_type = "shipping"',array('address_shipping.company as shipping_company'));
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

在_prepareColumns()下更改为:

    $this->addColumn('company', array(
        'header' => Mage::helper('sales')->__('Bill to Company'),
        'index' => 'billing_company',
        'filter_index' => 'address_billing.company',
    ));

    $this->addColumnAfter('shipping_company', array(
        'header' => Mage::helper('sales')->__('Ship to Company'),
        'index' => 'shipping_company',
        'filter_index' => 'address_shipping.company',
        ),
    'billing_name'
    );

请记住,我必须使用addColumnAfter函数将我的运输公司列放在正确的位置。

有了这个解决方案,一切都终于以我想要的方式运作了!

快乐的编码!

答案 1 :(得分:1)

修改代码

     protected function _prepareCollection()
        {
            $collection = Mage::getResourceModel($this->_getCollectionClass());

             $collection->getSelect()->join(array('billing'=>'sales_flat_order_address'),'main_table.entity_id=billing.parent_id and billing.address_type="billing"',array('*'));

            $collection->getSelect()->join(array('shipping'=>'sales_flat_order_address'),'main_table.entity_id=shipping.parent_id and shipping.address_type="shipping"',array('shipping.company as  shipping_company'));

            $this->setCollection($collection);

             parent::_prepareCollection();
   return Mage_Adminhtml_Block_Widget_Grid::_prepareCollection();
        }

在_prepareColumns()

中添加列
 $this->addColumn('company', array(
            'header' => Mage::helper('sales')->__(' Billing company'),
            'index' => 'company',
            'filter_index' => 'billing.company',
        ));
         $this->addColumn('shipping_company', array(
            'header' => Mage::helper('sales')->__(' Shipping company'),
            'index' => 'shipping_company',
            'filter_index' => 'shipping_company',
        ));