如何在magento订单网格中正确添加shipping_description列?

时间:2014-11-14 00:17:16

标签: php magento grid

有许多教程和建议,包括安装自定义扩展程序等。

我已经通过使用以下代码修改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();
} 

任何想法,想法都会受到赞赏!!!

3 个答案:

答案 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

  1. 复制Grid.php

    /app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php to /app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php

    如果路径不存在则创建它。

  2. 打开新的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');

  3. 将以下代码添加到_prepareColumns()功能中(在您希望的addColumn()次来电之间)

    $this->addColumn('shipping_description', array( 'header' => Mage::helper('sales')->__('Delivery'), 'type' => 'text', 'index' => 'shipping_description',
    'filter_index' => 'mt.shipping_description', ));

  4. 查找addColumns()的{​​{1}}个函数,并在每个函数中添加以下参数:

    increment_id, store_id, created_at, base_grand_total, grand_total, status

  5. 欢迎任何关于如何优化上述代码的建议。