Ошибка фильтрации при использовании пользовательской коллекции объектов Varien в сетке администратора

magento.stackexchange https://magento.stackexchange.com/questions/266

  •  16-10-2019
  •  | 
  •  

Вопрос

Я создал пользовательскую коллекцию объектов Varien для моего модуля администратора (потому что данные не из DB) и успешно показали ее в сетке администратора. Я создал коллекцию, используя следующий код:

$collection = new Varien_Data_Collection();

Внутренняя петля:

$object = new Varien_Object();
$object->setFileName($filename);
$collection->addItem($object);

Все это работает отлично, за исключением случаев, когда я пытаюсь отфильтровать, используя систему фильтрации сетки, он возвращает эту ошибку:

Фатальная ошибка: вызовы к неопределенному методу varien_data_collection :: addfieldtofilter () in /data/www/vhosts/adammoss.co.uk/httpdocs/magento/app/code/core/mage/adminhtml/block/widget/grid.php on line 472

я знаю это addFieldToFilter() используется только на объектах EAV, которые, очевидно, у моей коллекции. У меня вопрос, знает ли кто -нибудь об этом?

Могу ли я каким -то образом добавить этот метод к своему объекту или мне придется создать модель для работы?

****** Обновление 08/02/2012 ******

Итак, я немного изменил то, как я это делаю. Я все еще использую свой пользовательский класс, который является точным дубликатом Filesystem.php

Моя коллекция сетки теперь выглядит так:

protected function _prepareCollection()
{
    $collection = new MyNamespace_MyModule_Model_Csv_Collection();
    $collection->addTargetDir('my/target/path');
    $this->setCollection($collection);

    return parent::_prepareCollection();
}

Он загружается во всех моих файлах в сетку, как и ожидалось, и теперь это ставится на пенсию! Однако по какой -то причине он все еще не будет фильтровать или сортировать, хотя я буквально просто использую тот же класс, что и Filesystem.php.

я проверю Mage_Backup класс, как вы предложили.

Это было полезно?

Решение

Проблема не в EAV, основанных на объектах. Метод addFieldToFilter() доступен только в Varien_Data_Db_Collection, эти модели EAV и Standard ORM расширяются. Если вы хотите, чтобы ваш модуль сетки администратора работал с вашей коллекцией так же, как и в коллекции DB, вам необходимо реализовать два метода:

  • addFieldToFilter($filterName, $conditionArray)
  • setSort($fieldName, $direction)

Пример такой пользовательской реализации коллекции, которую вы можете найти в Varien_Data_Collection_Filesystem Класс, который использует коллекции на основе FS. Такая коллекция, например, используется в Mage_Backup Модуль, чтобы показать сетку с файлами резервного копирования.

С уважением, Иван

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top