0

我目前正在为 magento 开发一个自定义模块,该模块将列出员工。

我几乎想通了一切。我唯一剩下的就是如何突出显示选定的值。

我遇到的问题是后端。

每个员工有 2 个标签,一个用于员工数据,一个用于 magento 类别。

1 名员工可以拥有 1 个或多个类别。

存储类别的数据库表是非 eav 表。

所以我的问题是多选中的什么决定了哪些值被选中?就像现在一样,只选择了一个值。

4

2 回答 2

9

我认为您可以通过简单地将要选择的 id 数组传递到为 _prepareForm() 方法中的多选添加的字段的“值”属性中来做到这一点。类似于以下内容。

$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),
));

表单元素的 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);
}

我通常将选定的商店(如您的案例中的类别)作为文本列和逗号分隔的 id 值存储在主模型中,因此会爆炸。

在用于编辑操作的控制器中,我将正在编辑的模型放入法师注册表中,以便我们可以加载它以及上面步骤中的值。

Mage::register('mymodel_data', $model);
于 2013-10-02T21:34:49.363 回答
3

谢谢回答。

这就是我的领域的样子:

$fieldset->addField('npn_CatID', 'multiselect', array(
          'label'    => Mage::helper('employeelist')->__('Kategori'),
          'class'    => 'required-entry',
          'required' => true,
          'name'     => 'npn_CatID',
          'values'   => $data,
          'value'   => array(3,5)
        ));

npn_CatID 是我的数据库中保存类别 ID 的值。我试图更改名称和字段 ID,但无法正常工作。当它的字段 id 像上面一样时,选择了一个值,并且为所选员工插入了最后一个值

我的数据数组看起来像

 array(array('value' => '1', 'label' => 'USB'), array('value' => '2', 'label' => 'Memories')) 
于 2013-10-03T06:20:27.673 回答