我为管理员模块创建了一个自定义的Varien对象集合(因为数据不是来自DB),并成功地显示在Admin Grid中。我通过使用以下代码构建了该集合:

$collection = new Varien_Data_Collection();

内部循环:

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

除非我尝试使用网格过滤系统过滤,否则一切都很好,它返回此错误:

致命错误:致电未定义方法varien_data_collection :: 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和标准ORM模型扩展。如果您想以与DB Collection合作的方式与您的收藏合作方式一起工作,则需要实现两种方法:

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

您可以在 Varien_Data_Collection_Filesystem 利用基于FS的集合的类。例如,这种收藏在 Mage_Backup 模块显示带有备份文件的网格。

真诚的,伊万

许可以下: CC-BY-SA归因
scroll top