我制作了一个反映CMS-> Page的小型管理模块。我的管理页面的块使用app\code\core\Mage\Adminhtml\Block\Catalog\Product\Grid.php
中的代码,该代码为我提供了一个网格,我可以在原始的CMS->页面部分对其进行排序和过滤。
这是我的管理页面块中的代码:
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();
}
我无法再排序或过滤。任何人都可以了解发生的事情,如果我有正确的方法来改变行数据?感谢
答案 0 :(得分:2)
发生了什么:正在加载您的收藏。 foreach
语言构造触发了集合的load
方法,它从数据库中提取数据并填充items
。
为什么你的排序不起作用?因为已经加载后将排序应用于集合。这意味着这些项目已经存在于您的集合中,并具有默认排序顺序。
你应该怎么做?现在我不知道你想用每个集合项的setData
方法完成什么。如果您要在创建列时使用它,只需在列中添加字符串值。
...->addColumn('title', array('default' => 'Hello world'))
如果您想要提取集合中存在的更多数据,您也不需要加载它,只需使用类似的集合方法
addAttributeToSelect
(如果是EAV实体)或addFieldToFilter
。