magento-将客户名称添加到magento 1.7.0.2中的订单网格中

magento-将客户名称添加到magento 1.7.0.2中的订单网格中,magento,magento-1.7,Magento,Magento 1.7,我正在尝试在销售订单网格中为客户名称添加一个新的列,位于此处: App/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php 我想在“管理客户”中添加客户名称 我添加了以下代码: protected function _getCollectionClass() { return 'sales/order_grid_collection'; } protected function _prepareCollection() {

我正在尝试在销售订单网格中为客户名称添加一个新的
,位于此处:

App/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php
我想在“管理客户”中添加客户名称

我添加了以下代码:

protected function _getCollectionClass()
{
    return 'sales/order_grid_collection';
}

protected function _prepareCollection()
{
    $collection = Mage::getResourceModel($this->_getCollectionClass());
    /*junpeng add start*/

    $collection->getSelect()
    ->join(
    'customer_entity',
    'main_table.customer_id = customer_entity.entity_id', array('email' => 'email'));

    $collection->getSelect()->join(
    'customer_entity_varchar',
    'main_table.entity_id = customer_entity_varchar.entity_id', array('name' => 'value')
    );

    /*junpeng add end*/
    $this->setCollection($collection);
    return parent::_prepareCollection();
}
protected function _prepareColumns()
{
    $this->addColumn('name', array(
        'header'    => Mage::helper('sales')->__('Customer Name'),
        'index' => 'name',
    ));

    $this->addColumn('email', array(
        'header'    => Mage::helper('Sales')->__('Customer Email'),
        'index'     => 'email',
        'type'        => 'text',
    ));
}
客户电子邮件可以,但添加客户名称不起作用


有人能帮我解决这个问题吗?

有一个免费的magento扩展:


它目前是alpha,但我已经测试过了,它在1.6和1.7上运行得非常好

您不能在一行代码联接中获取客户名称。Firstname和Lastname是不同的属性,您需要将它们与原始集合合并,然后将它们连接起来显示为Fullname

所以基本上,替换

$collection->getSelect()->join(
    'customer_entity_varchar',
    'main_table.entity_id = customer_entity_varchar.entity_id', array('name' => 'value')
    );
使用此代码

$fn = Mage::getModel('eav/entity_attribute')->loadByCode('1', 'firstname');
$ln = Mage::getModel('eav/entity_attribute')->loadByCode('1', 'lastname');
$collection->getSelect()
    ->join(array('ce1' => 'customer_entity_varchar'), 'ce1.entity_id=main_table.customer_id', array('firstname' => 'value'))
    ->where('ce1.attribute_id='.$fn->getAttributeId()) 
    ->join(array('ce2' => 'customer_entity_varchar'), 'ce2.entity_id=main_table.customer_id', array('lastname' => 'value'))
    ->where('ce2.attribute_id='.$ln->getAttributeId()) 
    ->columns(new Zend_Db_Expr("CONCAT(`ce1`.`value`, ' ',`ce2`.`value`) AS customer_name"));
并将您获取客户名称的
addColumn('name'),
code-in
\u prepareColumns
方法替换为:

$this->addColumn('customer_name', array(
        'header'    => Mage::helper('sales')->__('Customer Name'),
        'index' => 'customer_name',
        'filter_name' => 'customer_name'
    ));

我从卡尔佩什那里得到了答案 所以你应该替换这个代码

$collection->getSelect()->join(
'customer_entity_varchar',
'main_table.entity_id = customer_entity_varchar.entity_id', array('name' => 'value')
);
用这些线

$customerTable = Mage::getResourceSingleton('customer/customer')->getEntityTable();
$firstnameAttribute=Mage::getResourceSingleton('customer/customer')->getAttribute('firstname');

$firstnameAttributeTable = $firstnameAttribute->getBackend()->getTable();

$lastnameAttribute=Mage::getResourceSingleton('customer/customer')->getAttribute('lastname');
$lastnameAttributeTable = $lastnameAttribute->getBackend()->getTable();
$collection->getSelect()
->join( array('customer_varchar1'=>$firstnameAttributeTable),'main_table.customer_id =customer_varchar1.entity_id and customer_varchar1.attribute_id='.$firstnameAttribute->getId(),
        array('customer_varchar1.value'))
    ->join( array('customer_varchar2'=>$lastnameAttributeTable),'main_table.customer_id =customer_varchar2.entity_id and customer_varchar2.attribute_id='.$lastnameAttribute->getId(),
        array('customer name'=>'CONCAT(customer_varchar2.value ," " ,customer_varchar1.value)'));

谢谢你的帮助!我测试了你的代码,然后发现了一个问题。如果此人没有登录,所有信息都不会显示在你的代码中。@JasonCheng我对此表示怀疑。我们没有从客户的会话中获得任何值,所以这不成问题。这也是为了后端网格,所以这里不考虑客户的登录。嗨,kalpesh..我使用了上面的代码在我的自定义模块网格中,它给了我一个错误----未找到列:“where子句”中的1054未知列“customer\u name”……你知道我哪里可能出错吗。