以下代码允许在订单/销售页面中添加一列,其中将送货方式显示为包含所有送货承运人的送货说明。
_prepareCollection
$collection->getSelect()->join('sales_flat_order', 'main_table.entity_id = sales_flat_order.entity_id',array('shipping_description'));
_prepareColumn
$this->addColumn('shipping_method', array(
'header' => Mage::helper('sales')->__('Shipping Method'),
'index' => 'shipping_description',
'filter_index' => 'main_table.status',
));
编译完所有内容后,送货方式看起来很完美。现在,当我尝试通过prcessing对命令进行排序并点击搜索时,会出现此错误:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'status' in where clause is ambiguous, query was: SELECT COUNT(*) FROM `sales_flat_order_grid` AS `main_table` INNER JOIN `sales_flat_order` ON main_table.entity_id = sales_flat_order.entity_id WHERE (status = 'processing')
经过一些研究后,这意味着当表格连接时存在双重状态,现在我如何从中创建一个alians以及如何应用它。此外,如果有人知道按此列过滤/排序的方式会很棒。
PS。该文件位于: 应用程序/代码/本地/法师/ Adminhtml /砌块/销售/顺序
编辑:现在我正在尝试找出如何根据数据库中的值创建选项下拉列表。这是我试图开始工作的代码:
private static $_deliveryGroups = array();
public static function getDeliveryArray() {
if (count(self::$_deliveryGroups) == 0) {
$delivery_group = new Mage_Shipping_Model_Group();
$delivery_groups = $delivery_group->getColection()->toOptionHash();
self::$_deliveryGroups = $delivery_groups;
}
return self::$_deliveryGroups;
}
Grid.php中的其他值
$this->addColumn('shipping_method', array(
'header' => Mage::helper('sales')->__('Shipping Method'),
'renderer' => 'Vehence_Module_Block_Adminhtml_Block_Sales_Order_Desc',
'type' => 'options',
'options' => Vehence_Module_Block_Adminhtml_Block_Sales_Order_Desc::getDeliveryArray(),
));
而且:
protected function _getAttributeOptions($attribute_code)
{
$attribute = Mage::getModel('sales/order')->getAttribute('shipping_description', $attribute_code);
$options = array();
foreach( $attribute->getSource()->getAllOptions(true, true) as $option ) {
$options[$option['value']] = $option['label'];
}
return $options;
}
答案 0 :(得分:1)
您需要为新字段使用自定义渲染器。然后在渲染器方法中,您有orderId。使用该ID,您可以实例化订单对象并获取并输出您喜欢的任何字段。
class Vendor_Module_Block_Renderer_Shipping extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
public function render(Varien_Object $row)
{
$orderId = $row->getId();
$order = Mage::getModel('sales/order')->load($orderId);
return $order->getData('shipping_description');
}
}
对于以下方法(更好地重写)添加:
$this->addColumn('history', array(
'header' => Mage::helper('sales')->__('History status'),
'type' => 'text',
'renderer' => new Vendor_Module_Block_Renderer_Shipping()
));
<强> upd.1 强>
所以... 我没有在我的解决方案中应用任何过滤器。问题在于订单收集。在视觉上它看起来很好,但所有过滤器都应用了不包含过滤必要字段的集合。那是因为我拒绝了我的解决方案。
那是因为我认为你的解决方案为此目的要好得多,我决定解决它。我为该模块创建了git存储库。它应该有效。检查一下:https://github.com/zhartaunik/AddField
希望它会有所帮助
答案 1 :(得分:0)
您需要添加额外的数组选项才能解决此问题,即filter_index
$this->addColumn('status', array(
'header' => Mage::helper('sales')->__('Status'),
'index' => 'status',
'**filter_index' => 'main_table.status**',
'type' => 'options',
'width' => '70px',
'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
));