Я переписал app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php
с 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();
}
}
& вот мои изменения в Grid (я только что добавил столбец и собираюсь сделать его доступным для поиска)
$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',
));
Я получаю то, что хочу. Но этот столбец имеет много пробелов, как ведущих, так и конечных
из-за этого я думаю, что это сед. не в состоянии поиска.
Кто-нибудь может подсказать, что можно сделать, чтобы убрать эти пробелы
Большое спасибо заранее
EDIT
Через несколько дней я понял, что эти пробелы являются общими в сетке, и это не имеет ничего общего с опцией поиска.
Кто-нибудь может подсказать, как сделать пользовательский столбец в состоянии поиска, который был добавлен в сетку с помощью рендерера ???
Спасибо
2 РЕДАКТИРОВАТЬ
Ребята Согласно 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_grid , а не из sales_flat_order , именно поэтому он сообщает об ошибке в неизвестном столбце согласно clockworkgeek первое решение
Проблема с текущей реализацией заключается в том, что Magento сообщает об ошибке Неустранимая ошибка: вызов неопределенного метода Mage_Sales_Model_Mysql4_Order_Collection :: addExpressionAttributeToSelect ()
, поскольку Mage_Sales_Model_Mysql4_Order_Collection не имеет метода addExpressionAttributeToSelect, вместо этого у него есть addExpressionFieldToSelect метод
Теперь мне нужна помощь, чтобы написать правильный синтаксис для метода addExpressionAttributeToSelect. Изменение только имени метода мне не помогает. Я также сослался на документы