2

columnここにある販売注文グリッドに新しい顧客名を追加しようとしています:

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',
    ));
}

顧客の電子メールは問題ありませんが、顧客名を追加しても機能しません!

誰かがこの問題を解決するのを手伝ってくれますか?

4

3 に答える 3

14

1行のコード結合だけでは顧客名を取得できません。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',コードを次のように置き換えます。_prepareColumns

$this->addColumn('customer_name', array(
        'header'    => Mage::helper('sales')->__('Customer Name'),
        'index' => 'customer_name',
        'filter_name' => 'customer_name'
    ));
于 2013-04-28T11:33:24.083 に答える