Magento的发票电网filter_condition_callback不工作 [英] Magento invoice grid filter_condition_callback not working

查看:57
本文介绍了Magento的发票电网filter_condition_callback不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用观测添加自定义列到发票网格. 问题是我无法按新列进行排序或过滤.

I added a custom column to invoice grid using an observer. The problem is that I can't sort or filter by the new column.

我添加了一个过滤条件的回调但功能不被调用.

I added a filter condition callback but the function is not called.

这是我的Observer.php

Here is my 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;
    }
}

我增加了一个出口;检查该函数是否被调用.

I added an exit; to check if the function is called or not.

推荐答案

尝试一下:

添加新功能,保护您的观察器类:

Add a new protected function to your observer class:

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

然后调用和新的功能后直接

Then call $block->sortColumnsByOrder() and the new function $this->_callProtectedMethod($block, '_prepareCollection') directly after $block->addColumnAfter();

这篇关于Magento的发票电网filter_condition_callback不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆