我认为你可以通过简单地将要选择的id的数组传递到为_prepareForm()方法中的multiselect添加的字段的'value'属性来实现.像下面这样的东西.
$fieldset->addField('category_id', 'multiselect', array(
'name' => 'categories[]',
'label' => Mage::helper('cms')->__('Store View'),
'title' => Mage::helper('cms')->__('Store View'),
'required' => true,
'values' => Mage::getSingleton('mymodule/mymodel')->getMymodelValuesForForm(),
'value' => array(1,7,10),
));
Run Code Online (Sandbox Code Playgroud)
表单元素的id(例如category_id)不能是模型中的属性,否则在以后使用$ form-> setValues()设置表单值时,属性值将被覆盖.
我通常将多个选项存储为由逗号分隔的文本列,就像大多数magento模块处理存储一样,需要稍微不同的方法,如下所示.
在带有多选的选项卡的表单块中,首先要在_prepareForm()方法中定义要显示的元素.然后,您可以从模型中获取值并将它们放入表单数据中.
protected function _prepareForm()
{
...
$fieldset->addField('store_id', 'multiselect', array(
'name' => 'stores[]',
'label' => Mage::helper('cms')->__('Store View'),
'title' => Mage::helper('cms')->__('Store View'),
'required' => true,
'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, true),
));
...
if ( Mage::getSingleton('adminhtml/session')->getMymodelData() )
{
$data = Mage::getSingleton('adminhtml/session')->getMymodelData();
} elseif ( Mage::registry('mymodel_data') ) {
$data = Mage::registry('mymodel_data')->getData();
}
$data['store_id'] = isset($data['stores']) ? explode(',', $data['stores']) : array();
$form->setValues($data);
}
Run Code Online (Sandbox Code Playgroud)
我通常将选定的商店(在您的情况下为类别)存储在主模型中作为文本列和逗号分隔的ID值,因此爆炸.
在用于编辑操作的控制器中,我将正在编辑的模型放入mage注册表中,以便我们可以在上面的步骤中加载它和它的值.
Mage::register('mymodel_data', $model);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17194 次 |
最近记录: |