想要添加一个要在自定义Magento管理表单中呈现的自定义模型。只是似乎无法让源模型呈现任何选项。在谷歌上找不到任何东西,因为它主要与系统/配置源模型示例有关。请参阅下面的代码
模型文件(My/Module/Model/MyModel.php)
<?php
class My_Module_Model_MyModel extends Mage_Core_Model_Abstract
{
static public function getOptionArray()
{
$allow = array(
array('value' => '1', 'label' => 'Enable'),
array('value' => '0', 'label' => 'Disable'),
);
return $allow;
}
}
和我的表单选项卡文件 - 选项卡显示多选字段,但其空白(我的/模块/块/管理员/模块/编辑/选项卡/数据.php)
<?php
class My_Module_Block_Adminhtml_Module_Edit_Tab_Data extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm(){
$form = new Varien_Data_Form();
$this->setForm($form);
$fieldset = $form->addFieldset('module_form', array('legend'=>Mage::helper('module')->__('Module Information')));
$object = Mage::getModel('module/module')->load( $this->getRequest()->getParam('module_id') );
echo $object;
$fieldset->addField('module_enabled', 'multiselect', array(
'label' => Mage::helper('module')->__('Allowed Module'),
'class' => 'required-entry',
'required' => true,
'name' => 'module_enabled',
'source_model' => 'My_Module_Model_MyModel',
'after_element_html' => '<small>Select Enable to Allow</small>',
'tabindex' => 1
));
if ( Mage::getSingleton('adminhtml/session')->getModuleData() )
{
$form->setValues(Mage::getSingleton('adminhtml/session')->getModuleData());
Mage::getSingleton('adminhtml/session')->setModuleData(null);
} elseif ( Mage::registry('module_data') ) {
$form->setValues(Mage::registry('module_data')->getData());
}
return parent::_prepareForm();
}
}
所以我还有其他字段、选项卡,它们都保存数据等,但只是无法使用多选字段中的自定义模型呈现值。
看起来源模型中的方法名称不正确。此外,您可能不需要在源模型中扩展Mage_Core_Model_Abstract
。
试试这个:
<?php
class My_Module_Model_MyModel
{
public function toOptionArray()
{
return array(
array('value' => '1', 'label' => Mage::helper('module')->__('Enable')),
array('value' => '0', 'label' => Mage::helper('module')->__('Disable')),
);
}
}
OP的解决方案从问题迁移到答案:
更新了 MyModel.php 以获取集合中的 foreach (CMS 页面)例如)
在我的/模块/<?php class My_Module_Model_MyModel { public function toOptionArray($withEmpty = false) { $options = array(); $cms_pages = Mage::getModel('cms/page')->getCollection(); foreach ($cms_pages as $value) { $data = $value->getData(); $options[] = array( 'label' => ''.$data['title'].'('.$data['identifier'].')', 'value' => ''.$data['identifier'].'' ); } if ($withEmpty) { array_unshift($options, array('value'=>'', 'label'=>Mage::helper('module')->__('-- Please Select --'))); } return $options; }
块/管理html/模块/编辑/选项卡/数据中.php我只是删除了"source_model"并将其替换为
'values' => Mage::getModel('module/mymodel')->toOptionArray(),
补充一下,还有多选值的问题刷新时保存/更新多选字段/编辑时保存页。为了使它工作,我在保存操作(或用于保存表单数据的操作名称)。见下文我的在控制器中保存操作,适用于位于My/Module/controllers/Adminhtml/ModuleController.php
public function saveAction() { $model = Mage::getModel('module/module'); if ($data = $this->getRequest()->getPost()) { $model = Mage::getModel('module/module'); $model->setData($data) ->setModuleId($this->getRequest()->getParam('module_id')); try { if ($model->getCreatedTime() == NULL || $model->getUpdateTime() == NULL) { $model->setCreatedTime(now())->setUpdateTime(now()); } else { $model->setUpdateTime(now()); } $ModuleEnabled = $this->getRequest()->getParam('module_enabled'); if (is_array($ModuleEnabled)) { $ModuleEnabledSave = implode(',',$this->getRequest()->getParam('module_enabled')); } $model->setModuleEnabled($ModuleEnabledSave); //save form data/values per field $model->save(); Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('module')->__('Item was successfully saved')); Mage::getSingleton('adminhtml/session')->setFormData(false); if ($this->getRequest()->getParam('back')) { $this->_redirect('*/*/edit', array('module_id' => $model->getModuleId())); return; } $this->_redirect('*/*/'); return; } catch (Exception $e) { Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); Mage::getSingleton('adminhtml/session')->setFormData($data); $this->_redirect('*/*/edit', array('module_id' => $this->getRequest()->getParam('module_id'))); return; } } Mage::getSingleton('adminhtml/session')->addError(Mage::helper('module')->__('Unable to find item to save')); $this->_redirect('*/*/'); }
这会将内爆数组(即 2、3、6、23、28)保存到数据库中值,并在相应的刷新/更新/保存选项卡上的选项卡