Я добавил пользовательский столбец в Customer Grid:
$this->addColumn('shipping_name', array(
'header' => Mage::helper('customer')->__('Shipping name'),
'index' => 'entity_id',
'renderer' => new My_Unique_Block_Customer_Renderer_Shippingname(),
'filter_condition_callback' => array($this, '_shippingNameFilter')
));
и средство визуализации Shippingname.php выглядит так:
class My_Unique_Block_Customer_Renderer_Shippingname extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
public function render(Varien_Object $row)
{
$id = $row->getData($this->getColumn()->getIndex());
$customer = Mage::getModel('customer/customer')->load($id); //customer id
$data = "";
if ( $customer->getDefaultShippingAddress() != null ) {
$shipping_address = $customer->getDefaultShippingAddress();
if ( $shipping_address->getFirstname() != null ) {
$data .= $shipping_address->getFirstname();
}
if ( $shipping_address->getLastname() != null ) {
if ( $shipping_address->getFirstname() != null ) {
$data .= " ";
}
$data .= $shipping_address->getLastname();
}
}
return $data;
}}
Что я должен заменить на функцию _shippingNameFilter () вместо «shipping_name like?» заставить фильтр в этом столбце работать?
protected function _shippingNameFilter($collection, $column)
{
if (!$value = $column->getFilter()->getValue()) {
return $this;
}
$this->getCollection()->getSelect()->where("shipping_name like ?", "%$value%");
return $this;
}
Спасибо!
Если я правильно понял ваш вопрос, то для пользовательского фильтра необходимо выполнить следующие шаги.
Вот ваша таблица клиентов:
$this->addColumn('shipping_name', array(
'header' => Mage::helper('customer')->__('Shipping name'),
'index' => 'entity_id',
'renderer' => new My_Unique_Block_Customer_Renderer_Shippingname(),
'filter_condition_callback' => array($this, '_customShippingFilterCallBack')
));
И добавьте такой метод,
protected function _customShippingFilterCallBack($collection, $column)
{
//Put your logic here..!!
if (!$value = $column->getFilter()->getValue())
{
return $this;
}
$this->getCollection()->getSelect()->where("shipping_name like ?", "%$value%");
return $this;
}
Примечание. Это базовая структура для создания пользовательского фильтра. Вы должны сделать некоторые изменения в соответствии с вашими потребностями.
Да. @ Vishwas Сони прав. Далее, если кто-то хочет присоединить таблицу eav_attribute_option_value к значению фильтрации, можно использовать приведенный ниже код.
$this->addColumn(
'product_manufacturer',
[
'header' => __('Manufacturer'),
'index' => 'manufacturer',
'filter_condition_callback' => [$this, 'filterCustomManufacturer'],
'header_css_class' => 'col-manufacturer',
'column_css_class' => 'col-manufacturer'
]
);
Ниже добавлена функция обратного вызова условия фильтра, включая соединения типа
protected function filterCustomManufacturer($collection, $column)
{
if (!$value = $column->getFilter()->getValue()) {
return $this;
}
$collection->getSelect()->joinLeft(array('c_p_e_i'=>'catalog_product_entity_int'),
'e.row_id = c_p_e_i.row_id',array('value'));
$collection->getSelect()->joinLeft(array('attribute_option'=>'eav_attribute_option_value'),
'c_p_e_i.value = attribute_option.option_id and attribute_option.store_id = 0',
array('eaov_val'=>'value' , 'eaov_option'=>'option_id'));
$collection->getSelect()->where("`attribute_option`.`value` like ?", "%$value%");
return $this;
}