管理グリッドでカスタム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 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モデルと標準ORMモデルが拡張されています。 DBコレクションと同じ方法で、管理グリッドモジュールをコレクションで動作させたい場合は、2つの方法を実装する必要があります。

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

あなたが見つけることができるこのようなカスタムコレクションの実装の例 Varien_Data_Collection_Filesystem FSベースのコレクションを利用するクラス。たとえば、この種のコレクションはで使用されます Mage_Backup バックアップファイルでグリッドを表示するモジュール。

心から、イヴァン

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top