Prestashop模块:添加多选下拉列表

时间:2014-10-08 22:46:27

标签: forms module field prestashop-1.6

我正在研究一个模块,我想知道如何使用fields_options添加多个下拉列表。

        $this->fields_options = array(
        'Test' => array(
            'title' =>  $this->l('Test'),
            'icon' => 'delivery',
            'fields' => array(
                'IXY_GALLERY_CREATION_OCCASION' => array(
                    'title' => $this->l('DropdownList'),
                    'type' => 'select',
                    'multiple' => true , // not working
                    'identifier' => 'value',
                    'list' => array(                                  
                            1 => array('value' => 1, 'name' => $this->l('Test 1 ')),
                            2 => array('value' => 2, 'name' => $this->l('Test 2)'))                              
                          )
                ),
            ),
            'description' =>'',
            'submit' => array('title' => $this->l('Save'))
        )
    );

2 个答案:

答案 0 :(得分:0)

如果您的意思是:

,我就是这样做的
 $combo = $this->getAddFieldsValues();

   $fields_form = array(
        'form' => array(
            'legend' => array(
                'title' => $this->l('Title'),
                'icon' => 'icon-cogs'
            ),
            'input' => array(
                array(
                    'type' => 'select',
                    'lang' => true,
                    'label' => $this->l('Nom'),
                    'name' => 'nom_matiere',
                    'options' => array(
                      'query' => $combo[0],
                      'id' => 'id_option', 
                      'name' => 'name'
                        )
                    ),
                array(
                    'type' => 'select',
                    'lang' => true,
                    'label' => $this->l('Nom'),
                    'name' => 'name',
                    'options' => array(
                      'query' => $combo[1],
                      'id' => 'id_option', 
                      'name' => 'name'
                        )
                    ),
                ),
            ),
            'submit' => array(
                'title' => $this->l('Save'),
                'name' => $this->l('updateData'),
            )
        ),
    );

答案 1 :(得分:0)

答案是不正确的..由于它不仅在数据库中定义了字段,还必须以特殊的方式捕获和存储值,在这个例子中我说明存储为" 1,2,3, 6,8-"使用单个字段

完整的代码和所有步骤:https://groups.google.com/forum/m/?hl=es#!topic/venenuxsarisari/z8vfPsvFFjk

这里我只放了最重要的部分..

正如前面提到的那样链接,在模型定义,类和表sql中添加了新的fiel

此方法允许将数据库存储为" 1,2,3"因此,您只能使用一个字段来关联多个选定的值,更好的可能是使用groupbox 但是非常困难,请查看AdminCustomers prestachop的controllers目录中的controller类,它有一个多选组,它使用存储在单个字段中的关系表事件

然后在帮助器表单中,列表输入数组将select定义为:

在开始时不要忘记添加该行:

// aqui el truco de guardar el multiselect como una secuencia separada por comas, mejor es serializada pero bueh
$this->fields_value['id_employee[]'] = explode(',',$obj->id_employee);

这个$ obj是从该对象转到编辑时加载的先前存储值的表示,获取多选的字段的存储值,存储为" 1,3,4,6& #34;

并在字段形式的输入辅助列表中将选择倍数定义为:

            array(
                 'type' => 'select',
                'label' => $this->l('Select and employee'),
                'name' => 'id_employee_tech',
                'required' => false,
                'col' => '6',
                'default_value' => (int)Tools::getValue('id_employee_tech'),
                'options' => array(
                    'query' => Employee::getEmployees(true), // el true es que solo los que estan activos
                    'id' => 'id_employee',
                    'name' => 'firstname',
                    'default' => array(
                        'value' => '',
                        'label' => $this->l('ninguno')
                    )
                )
            ),

然后再覆盖后期处理

public function postProcess()
{
    if (Tools::isSubmit('submitTallerOrden'))
    {
        $_POST['id_employee'] = implode(',', Tools::getValue('id_employee'));
    }
    parent::postProcess();
}

这个存储在数据库中作为" 1,2,3"