从magento网格中的复杂值筛选数据

从magento网格中的复杂值筛选数据,magento,filter,grid,render,complex-data-types,Magento,Filter,Grid,Render,Complex Data Types,您好,我在装运网格中添加了一个新列,如下所示 $this->addColumn('telephone', array( 'header' => Mage::helper('sales')->__('Billing Phone'), 'index' => 'telephone', 'renderer'=> new OSP_Adminhtml_Block_Customer_Renderer_BillingPhone() ));

您好,我在装运网格中添加了一个新列,如下所示

    $this->addColumn('telephone', array(
    'header' => Mage::helper('sales')->__('Billing Phone'),
    'index' => 'telephone',

    'renderer'=> new OSP_Adminhtml_Block_Customer_Renderer_BillingPhone()
    ));
在本文中,我使用渲染器显示自定义值,如下所示

public function render(Varien_Object $row) {
        $customer_id = $row->getData('customer_id');

    if( $customer_id > 0 ) {
        // get member_id (club canon)
        $customer = Mage::getModel('customer/customer')->load($customer_id);
        if( is_object( $customer ) ) {
            $value = $customer->getData('mobile');
        }
    }else{
    $id = $row->getData('order_increment_id');
    $order = Mage::getModel('sales/order')->loadByIncrementId($id);
    $value = $order->getBillingAddress()->getTelephone();
}
    return $value;
}
它工作正常,并在以下基础上正确显示数据: 渲染器中的条件

但问题是现在我也需要过滤数据,而不是 因为它只在一列(如电话或手机)中查找数据而工作 我已经阅读了有关过滤条件回调的内容,但无法进行操作。你能告诉我怎么做吗


提前感谢

1。在列中添加行
filter\u condition\u callback
,如下所示:

 $this->addColumn('telephone', array(
    'header' => Mage::helper('sales')->__('Billing Phone'),
    'index' => 'telephone',
    'filter_condition_callback' => array($this, '_someCallBackFunction'),
    'renderer'=> new OSP_Adminhtml_Block_Customer_Renderer_BillingPhone()
    ));
在列中添加这一行之后,Magento将调用这个回调函数,在468行中查看
app/code/core/Mage/Adminhtml/Block/Widget/Grid.php

2.在块网格文件中创建
\u someCallBackFunction
函数,该函数将采用两个参数,
$collection
-未加载的collection对象和
$column
Mage\u Adminhtml\u block\u Widget\u grid\u column

protected function _someCallBackFunction($collection, $column)
{
    $value = $column->getFilter()->getValue();
    if ($value === null) { //here check if filter is not null
        return $this;
    }

    /**
     * Here you can add filter to collection
     * or do other manipulations with collection.
     * As example you can check filter value and filter collection.
     */
    if ($value != 0) { 
        $collection->addFieldToFilter('telephone', array('neq' => 0));
    }

    return $this;
}

请看我回答中的步骤。我的意思是,在回调函数中,我无法在集合中添加过滤器,您能帮我吗。感谢示例如何在回调函数中将过滤器添加到集合中,您能帮我加入表吗,因为我需要$customer=Mage::getModel('customer/customer')->load($customer\u id);正如您在我的渲染器中看到的,这意味着如果它找到了客户id,那么它应该显示mobile,否则它应该在搜索中获取电话