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 回答