Magento 发票网格 filter_condition_callback 不起作用

标签 magento filter grid

我使用观察者向发票网格添加了自定义列。 问题是我无法按新列进行排序或筛选。

我添加了过滤条件回调,但该函数未调用。

这是我的 Observer.php

class DB_CustomGrid_Model_Adminhtml_Observer
{
    public function onBlockHtmlBefore(Varien_Event_Observer $observer)
    {
        $block = $observer->getBlock();

        $payment_methods = array();
        $readConnection = Mage::getSingleton('core/resource')->getConnection('core_read');
        $query = 'SELECT method FROM '.Mage::getSingleton('core/resource')->getTableName('sales/order_payment').' GROUP BY method';
        $methods = $readConnection->fetchAll($query);
        foreach($methods as $payment) {
            if($payment["method"] !== 'free') {
                $payment_methods[$payment["method"]] = Mage::getStoreConfig('payment/'.$payment["method"].'/title');
            }
        }

        switch ($block->getType()) {
            case 'adminhtml/sales_invoice_grid':
                $block->addColumnAfter('state', array(
                    'header' => Mage::helper('sales')->__('Payment Method'),
                    'index' => 'method',
                    'type'  => 'options',
                    'width' => '70px',
                    'options' => $payment_methods,
                    'filter' => false,
                    'filter_condition_callback' => array($this, '_myCustomFilter'),
                ), 'method');
            break;
        }
    }

    public function beforeCollectionLoad(Varien_Event_Observer $observer)
    {
        $collection = $observer->getOrderInvoiceGridCollection();
        $collection->join(array('payment'=>'sales/order_payment'),'main_table.order_id=parent_id',array('method'));
    }

    protected function _myCustomFilter($collection, $column)
    {
        exit;
        if (!$value = $column->getFilter()->getValue()) {
            return $collection;
        }

        $collection->getCollection()->getSelect()->where("sales_order_payment.method like ?", "%$value%");
        return $collection;
    }
}

我添加了一个导出;检查该函数是否被调用。

最佳答案

试试这个:

向您的观察者类添加一个新的 protected 函数:

protected function _callProtectedMethod($object, $methodName) {
    $reflection = new ReflectionClass($object);
    $method = $reflection->getMethod($methodName);
    $method->setAccessible(true);
    return $method->invoke($object);
}

然后在 $block 之后直接调用 $block->sortColumnsByOrder() 和新函数 $this->_callProtectedMethod($block, '_prepareCollection') ->addColumnAfter();

关于Magento 发票网格 filter_condition_callback 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32222310/

相关文章:

wpf - 如何让我的 ScrollViewer 滚动查看区域?

javascript - extjs datecolumn 显示休息一天的日期

php - 悬停时显示 Bootstrap 模式

magento - 添加启用所见即所得的类别属性

magento - 使用 Paypal 快速结帐完成付款后如何获取授权ID

c# - 如何使用 Lucene.net 实现自定义过滤器?

Django 自递归 ManyToManyField 过滤查询

php - Magento 中的 PDF 发票生成

arrays - 搜索忽略 Swift 中顺序的多个单词

java - 多彩网格