Пользовательский фильтр в сетке администратора заказов на продажу, дающий php строгое уведомление об ошибке


Я смог добавить столбцы в таблицу сетки заказов на продажу в admin, но когда я пытаюсь использовать столбец для поиска, я получаю ошибку Strict Notice: call_user_func() expects parameter 1 to be a valid callback, non-static method filterSkus() should not be called statically

Вот функция наблюдателя

public function filterSkus($collection, $column)
{
    if (!$value = $column->getFilter()->getValue()) {
        return $this;
    }

    $collection->getSelect()->having(
        "group_concat(`m_sales_flat_order_item`.sku SEPARATOR ', ') like ?", "%$value%");

    return $this;
}

Вот помощник по обработке данных, вызывающий его

public function getSkusColumnParams()
{
    return array(
        'header' => 'SKUs',
        'index' => 'skus',
        'type' => 'text',
        'filter_condition_callback' => array('DR_Salesgridder_Model_Observer', 'filterSkus'),
    );
}

Ошибка стека происходит из call_user_func в Mage/Adminhtml/Block/Widget/Grid.php

protected function _addColumnFilterToCollection($column)
{
    if ($this->getCollection()) {
        $field = ( $column->getFilterIndex() ) ? $column->getFilterIndex() : $column->getIndex();
        if ($column->getFilterConditionCallback()) {
            call_user_func($column->getFilterConditionCallback(), $this->getCollection(), $column);
        }

Я сделал функцию filterSkus статичной, но она выдает мне ошибку undefined variable: this. Помимо удаления строгой отчетности, есть ли другой способ?

Author: Michael, 2015-07-16

1 answers

Используйте экземпляр наблюдателя, заменив

array('DR_Salesgridder_Model_Observer', 'filterSkus'),

С

array(Mage::getSingleton('salesgridder/observer'), 'filterSkus'),

(возможно, вам потребуется изменить псевдоним класса "salesgridder/observer" в зависимости от вашей конфигурации

 2
Author: Fabian Schmengler, 2015-07-16 13:03:09