Фильтр не работает в сетке


У меня есть пользовательский модуль с внутренней сеткой и формой редактирования. В форме редактирования у меня есть вкладка, которая содержит сетку для связанных продуктов.

Я реализовал сетку на вкладке, используя код из сетки продуктов для связанных продуктов.

Теперь, кажется, все работает, и флажки установлены в соответствии с данными из коллекции.

Единственная проблема связана с фильтром Да/Нет/Любой, который не работает:
установка фильтра на "да" I имейте пустую сетку, вместо этого, если я установлю фильтр на "Нет/Нет", я смогу увидеть все продукты, а также выбранный продукт.

Таким образом, похоже, что какая-то связь между фильтром и именем поля пропущена

Author: Keyul Shah, 2013-02-04

1 answers

На странице webguys есть немецкая статья об этой проблеме: http://www.webguys.de/magento/turchen-23-pimp-my-produktgrid/

Nicht alle unsere Änderungen werden фон Магенто übernommen, zum Beispiel funktioniert die Sortierung und Filterung der neuen Атрибут нихт.

Das liegt daran, dass unsere Änderungen нах-дем-Ауфруф фон_prepareCollection(), в дем-дем-Спалтенинфос в коллекции übergeben werden, статтфинден.

Перевод:

Не все изменения вносятся magento, например, сортировка и фильтрация новых атрибутов не работает.

Это потому, что они сделаны после вызова _prepareCollection(), где информация о столбцах передается в коллекцию.

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

protected function _modifyProductGrid(Mage_Adminhtml_Block_Catalog_Product_Grid $grid) {
 
    $this->_addUpdatedAtColumn($grid);
    $this->_addColorColumn($grid);
 
    $this->_removeColumn($grid, 'set_name');
    $this->_removeColumn($grid, 'visibility');       

    // reinitialisiert die Spaltensortierung
    $grid->sortColumnsByOrder();
    // reinitialisiert die Sortierung und Filter der Collection
    $this->_callProtectedMethod($grid, '_prepareCollection');               

} 

Подробнее в посте. Я думаю, что исходный код вполне понятен, и если нет, используйте Google (если вы не понимаете немецкий;-))

 3
Author: Fabian Blechschmidt, 2020-06-15 08:30:17