所以,这是我在网站上发表的第一篇文章,但我过去从这个网站获得了很多知识,并期待学习更多知识。我绝对是一个新手,因为我和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'
);
瞧,一切都在发挥作用!
答案 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',
));