我在Prestashop做一个小模块。在那个模块中,我使用了带有helperform的multiselect。所以我的代码就像这样
array(
'type' => 'select',
'cols' => 8,
'class' => 'chosen-product-selct selected_products ',
'multiple' => true,
'label' => $this->l('Selected Products'),
'name' => 'selected_products[]',
'options' => array(
'query' => $product_query,
'id' => 'id',
'name' => 'product_name'
),
'desc' => $this->l('Select products from products list.'),
),
这里我将这些多选值保存到数据库中。但是当我进行编辑时,框中没有选择保存的值。盒子完全是空的。
获取结果我正在做这个
public function getConfigFieldsValues() {
'selected_products[]' => Tools::getValue('selected_products', Configuration::get('selected_products')),
}
它没有显示已经输入的值。所以有人可以告诉我如何解决这个问题吗?任何帮助和建议都会非常明显。感谢
答案 0 :(得分:2)
我找到了Prestashop多选择表单助手问题的解决方案。
为了使选择框正常工作,有以下要求:
$ fields_value数组的相应项的值应该选择值作为数组。例如:
$ fields_value ['manufacturer_ids []'] = array(“120”,“145”);
我将提交的值保存为数据库中的sarialized字符串,所以我这样处理它:
$selectedManufacturers = @unserialize($manufacturerIdsTakenFromDb);
if ($selectedManufacturers === false && $selectedManufacturers !== 'b:0;') {
$selectedManufacturers = array();
}
$fields_value['manufacturer_ids[]'] = $selectedManufacturers;
我在表单定义中的代码如下所示:
array(
'type' => 'select',
'label' => $this->l('Manufacturers'),
'name' => 'manufacturer_ids[]',
'multiple' => true,
'options' => array(
'query' => array(
array('key' => '1', 'name' => 'Apple'),
array('key' => '2', 'name' => 'Samsung'),
array('key' => '3', 'name' => 'HTC'),
),
'id' => 'key',
'name' => 'name'
)
),
如果您的代码满足所有这些并仍然无效,请告知我们,我们将很乐意协助您解决此问题。
答案 1 :(得分:0)
之前的答案是来自prestashop论坛的单一副本粘贴,但没有解决它,因为没有解释如何......
这里我正确解释了如何,必须以特殊方式捕获和存储值,在此示例中我演示使用单个字段存储为“1,2,3,6,8”
完整的代码和所有步骤:https://groups.google.com/forum/m/?hl=es#!topic/venenuxsarisari/z8vfPsvFFjk
这里我只放了最重要的部分..
正如前面提到的那样链接,在模型定义,类和表sql中添加了新的fiel此方法允许以“1,2,3”存储在数据库中,因此您只能使用单个字段来关联多个选定值,更好的可能是使用groupbox 但非常困难,看一下prestachop的controllers目录中的AdminCustomers控制器类,它有一个多选组,它使用存储在单个字段中的关系表事件
然后在帮助器表单中,列表输入数组将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”
并在字段形式的输入辅助列表中将选择倍数定义为:
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”