1

CMS->Page をミラーリングする小さな管理モジュールを作成しました。app\code\core\Mage\Adminhtml\Block\Catalog\Product\Grid.php私の管理ページのブロックは、元の CMS->Page セクションと同じように、並べ替えとフィルター処理が可能なグリッドを提供するコードを使用しています。

これは、私の管理ページのブロック内のコードです。

protected function _prepareCollection()
    {
        $collection = Mage::getModel('cms/page')->getCollection();
        $collection->setFirstStoreFlag(true);
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }

私が述べたように、これは正しく表示され、並べ替えを可能にします。

ただし、上記を次のように修正して行のデータを変更しようとすると:

protected function _prepareCollection()
    {
        $collection = Mage::getModel('cms/page')->getCollection();
        $collection->setFirstStoreFlag(true);

        foreach ($collection as $order) {
            $order->setData( 'title', 'Hello world' );    
        } 

        $this->setCollection($collection);
        return parent::_prepareCollection();
    }

並べ替えやフィルタリングができなくなりました。何が起こっているのか、そして行データを変更する正しい方法があれば誰でも光を当てることができますか? ありがとう

4

1 に答える 1

2

何が起こっているのか:あなたのコレクションがロードされています。言語のforeach構築によりload、コレクションのメソッドがトリガーされ、データベースからデータが取得され、が入力されitemsます。

ソートが機能しないのはなぜですか?ソートは、既にロードした後にコレクションに適用されるためです。これは、アイテムがデフォルトの並べ替え順序でコレクションにすでに存在していることを意味します。

どのようにあなたはあなたのことをすべきですか?setData今のところ、コレクションアイテムごとにその方法で何を達成したいのかわかりません。列の作成時に使用する場合は、列に文字列値を追加するだけです。

...->addColumn('title', array('default' => 'Hello world'))

コレクションに存在するデータをさらに取得する場合は、データをロードする必要はありません 。 addAttributeToSelect(EAVエンティティの場合)またはのようなコレクションメソッドを使用するだけaddFieldToFilterです。

于 2012-11-13T13:44:20.857 に答える