Ошибка фильтрации при использовании пользовательской коллекции объектов Varien в сетке администратора
-
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
Модуль, чтобы показать сетку с файлами резервного копирования.
С уважением, Иван