有许多教程和建议,包括安装自定义扩展程序等。
我已经通过使用以下代码修改Grid.php,根据各种提示和技巧添加了shipping_description罚款,但是当按照价格或状态对其进行排序时会抛出错误:
SQLSTATE [23000]:违反完整性约束:1052列'状态'在where子句中含糊不清 要么 SQLSTATE [23000]:完整性约束违规:1052列' increment_id' in where子句不明确
虽然它可以通过Billing and Shipping Name进行排序。
以下代码已添加到Grid.php中:
protected function _prepareCollection()
{
$collection = Mage::getResourceModel($this->_getCollectionClass());
$tableName = Mage::getSingleton("core/resource")->getTableName('sales_flat_order');
$collection->getSelect()->join($tableName, "main_table.entity_id = $tableName.entity_id",array("shipping_description"));
$this->setCollection($collection);
return Mage_Adminhtml_Block_Widget_Grid::_prepareCollection();
}
protected function _prepareColumns()
{
$this->addColumnAfter('shipping_description', array(
'header' => Mage::helper('sales')->__('Delivery'),
'width' => '180px',
'type' => 'text',
'index' => 'shipping_description'
),'shipping_name');
return parent::_prepareColumns();
}
任何想法,想法都会受到赞赏!!!
答案 0 :(得分:2)
我猜你正在做的是添加" shipping_description"集合中的字段但是,我可以通过一个简单的帮助你。即在网格中使用渲染器。在我看来,这更容易。
重写订单的网格块后(覆盖块是一个好习惯)将此添加到_prepareColumn()函数
$this->addColumn('shipping_description', array(
'header'=> Mage::helper('sales')->__('Shipping Description'),
'index' => 'shipping_description',
'filter' => false,
'sortable' => false,
'renderer' => 'PackageName_ModuleName_Block_Adminhtml_Sales_Order_Renderer_Shipping',
));
在这里,您可以看到渲染器指向类" PackageName_ModuleName_Block_Adminhtml_Sales_Order_Renderer_Shipping"。现在,继续创建名为" Renderer"在上面提到的路径和文件夹里面创建" Shipping.php"文件。
<?php
class Custom_Customer_Block_Adminhtml_Customer_Renderer_Lifetime extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
public function render(Varien_Object $row)
{
$customerId = $row->getData('entity_id');
$customer = Mage::getModel('customer/customer')->load($customerId);
$customerTotals = Mage::getResourceModel('sales/sale_collection')
->setCustomerFilter($customer)
->load()
->getTotals();
$customerLifetimeSales = $customerTotals->getLifetime();
//$customerNumberOfOrders = $customerTotals->getNumOrders();
echo Mage::helper('core')->currency($customerLifetimeSales);
}
}
在上述课程中,我会覆盖客户模块以确定客户的终身销售额。在此功能中,您可以执行任何操作以及您返回的内容。或者&#34;回声&#34;在此文件中将显示在网格中。
通过这种方式,您不需要加入集合中的表格。只需调用模型即可获取运送描述并打印出来。这样就可以了。它会更容易实现
希望这会有所帮助。
答案 1 :(得分:0)
为了防止在排序列中出现此类错误
SQLSTATE[23000]: Integrity constraint violation: 1052 Column ‘status’ in where clause is ambiguous ERROR
对您的订单进行排序时......请务必添加以下内容:
'filter_index'=>'main_table.status',
到addColumn Status数组
希望这对您有所帮助。
答案 2 :(得分:0)
以下情况适用于我的情况。排序现在适用于每个字段。没有覆盖核心文件。
对于同一条船上的人一步一步。测试1.8.1
从
复制Grid.php /app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php to /app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php
如果路径不存在则创建它。
打开新的Grid.php并在_prepareCollection()
行之后将以下代码添加到getResourceModel
:
$collection->getSelect()->join(array('mt'=>'sales_flat_order'),
'mt.entity_id = main_table.entity_id',
array('mt.increment_id','mt.store_id','mt.created_at','mt.shipping_description','mt.status','mt.base_grand_total','mt.grand_total'));
$collection->getSelect()->group('main_table.entity_id');
将以下代码添加到_prepareColumns()
功能中(在您希望的addColumn()
次来电之间)
$this->addColumn('shipping_description', array(
'header' => Mage::helper('sales')->__('Delivery'),
'type' => 'text',
'index' => 'shipping_description',
'filter_index' => 'mt.shipping_description',
));
查找addColumns()
的{{1}}个函数,并在每个函数中添加以下参数:
increment_id, store_id, created_at, base_grand_total, grand_total, status
欢迎任何关于如何优化上述代码的建议。