app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php
with &を書き直して、app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php
顧客の電子メール列をグリッドで表示するレンダラーを作成しました。
これが私のレンダラーファイルです:
class Mage_Adminhtml_Block_Renderer_Customer extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
public function render(Varien_Object $row)
{
$model = Mage::getModel('customer/customer')->load($row->getCustomerId());
return $model->getEmail();
}
}
&これが私のグリッドの変更です(列を追加したばかりで、検索可能にするつもりです)
$this->addColumn('billing_name', array(
'header' => Mage::helper('sales')->__('Bill to Name'),
'index' => 'billing_name',
));
// this is new col.
$this->addColumn('customer_email', array(
'header' => Mage::helper('sales')->__('Customer Email'),
'renderer' => 'adminhtml/renderer_customer',
));
私は欲しいものを手に入れています。しかし、この列/には、この列の先頭と末尾の両方に多くの空白があります。この列だと思います。検索できません。これらの空白を取り除くために何ができるかを誰かが提案できますか
よろしくお願いします
編集 数日後、これらの空白はグリッドで一般的であり、検索可能なオプションとは何の関係もないことがわかりました。レンダラーを使用してグリッドに追加された検索可能なカスタム列を作成する方法を誰かが提案できますか?ありがとう
2 EDIT Guys clockworkgeekに
よると_prepareCollection()
、上書きされたグリッドの方法を次のようにカスタマイズしました。
protected function _prepareCollection()
{
// 'sales/order_collection' is changed from 'sales/order_grid_collection'
$collection = Mage::getResourceModel('sales/order_collection');
$collection->addAttributeToSelect('*')
->joinAttribute('billing_firstname', 'order_address/firstname', 'billing_address_id', null, 'left')
->joinAttribute('billing_lastname', 'order_address/lastname', 'billing_address_id', null, 'left')
->joinAttribute('shipping_firstname', 'order_address/firstname', 'shipping_address_id', null, 'left')
->joinAttribute('shipping_lastname', 'order_address/lastname', 'shipping_address_id', null, 'left')
->joinAttribute('billing_fax', 'order_address/fax', 'billing_address_id', null, 'left')
->joinAttribute('billing_telephone', 'order_address/telephone', 'billing_address_id', null, '')
->addExpressionAttributeToSelect('billing_name',
'CONCAT({{billing_firstname}}, " ", {{billing_lastname}})',
array('billing_firstname', 'billing_lastname'))
->addExpressionAttributeToSelect('shipping_name',
'CONCAT({{shipping_firstname}}, " ", {{shipping_lastname}})',
array('shipping_firstname', 'shipping_lastname'));
$this->setCollection($collection);
return parent::_prepareCollection();
}
また、Grid Magentoがsales_flat_orderからではなくsales_flat_order_gridテーブルからデータを取得することを調査しました。これが、 clockworkgeekの最初のソリューションに従って不明な列のエラーを報告した理由です。
現在の実装の問題は、Magentoがエラーを報告すること です。致命的なエラー:未定義のメソッドMage_Sales_Model_Mysql4_Order_Collection :: addExpressionAttributeToSelect()の呼び出し
Mage_Sales_Model_Mysql4_Order_CollectionにはaddExpressionAttributeToSelectメソッドがなく、代わりにaddExpressionFieldToSelectメソッドがあるため、addExpressionAttributeToSelectメソッドの適切な構文を作成するためのヘルプが必要です。メソッド名を変更するだけでは役に立ちません。ドキュメントも参照しました