prestashop 多个复选框不保存值
prestashop multiple checkboxes do not save values
我不明白为什么没有使用助手将复选框值保存在数据库中。
尝试从我的模块设置中保存一些客户 ID:
数组:
$custs = Customer::getCustomers();
foreach ($custs as $key => $value) {
$options[] = array(
'id_customer' => (int)$value['id_customer'],
'infos' => $value['firstname'].' '.$value['lastname'].' | '.$value['email']
);
}
复选框:
'input' => array(
array(
'type' => 'checkbox',
'label' => $this->l('Customers'),
'desc' => $this->l('Select the Customers.'),
'name' => 'MY_MODULE_CUSTOMERS',
'values' => array(
'query' => $options,
'id' => 'id_customer',
'name' => 'infos',
),
),
)
$_POST 始终为空,但适用于其他输入。任何帮助将不胜感激。
谢谢。
你的代码是正确的,我试过了,这是结果
http://screencast.com/t/wfsW86iJj
- 您必须至少选中一个复选框。
在服务器上显示数据:
print_r($_POST);
die();
更好的方法是使用 groupbox 但它相当困难,请查看 prestachop 的控制器目录中的 AdminCustomers 控制器 class,它有多个select 使用存储在单个字段中的关系 table 事件的组
如果您想简单一点,使用单个字段存储在数据库中,请查看完整代码和所有步骤:https://groups.google.com/forum/m/?hl=es#!topic/venenuxsarisari/z8vfPsvFFjk
开头别忘了加上那一行:
// aqui el truco de guardar el multiselect como una secuencia separada por comas, mejor es serializada pero bueh
$this->fields_value['MY_MODULE_CUSTOMERS[]'] = explode(',',$obj->id_employee);
这个 $obj 是编辑时加载的先前存储值的表示...从那个对象中,获取 multiselect 字段的存储值,存储为“1,3 ,4,6
并且在字段表单帮助程序输入列表中将 select 倍数定义为:
array(
'type' => 'checkbox',
'label' => $this->l('Select and employee'),
'name' => 'MY_MODULE_CUSTOMERS[]',
'required' => false,
'col' => '6',
'default_value' => (int)Tools::getValue('id_employee_tech'),
'values' => array(
'query' => $options,
'id' => 'id_customer',
'name' => 'infos',
),
),
然后也覆盖 post 过程
public function postProcess()
{
if (Tools::isSubmit('submitTallerOrden'))
{
$_POST['MY_MODULE_CUSTOMERS'] = implode(',', Tools::getValue('MY_MODULE_CUSTOMERS'));
}
parent::postProcess();
}
这个 make 在数据库中存储为“1,2,3”
我不认为它在 PS 文档中。但是通过一些代码检查,您可以在
中看到
Backoffice/themes/default/template/helpers/form/form.tpl
<input type="checkbox" name="{$id_checkbox}" id="{$id_checkbox}" class="{if isset($input.class)}{$input.class}{/if}"{if isset($value.val)} value="{$value.val|escape:'html':'UTF-8'}"{/if}{if isset($fields_value[$id_checkbox]) && $fields_value[$id_checkbox]} checked="checked"{/if} />
{$value[$input.values.name]}
将属性 'val' 添加到选项。
$options[] = array(
'id_carrier' => $carrier['id_carrier'],
'name' => $carrier['name'],
'val' => $carrier['id_carrier'],
);
然后您获得了输入值所需的序列化。
"transportistas" => array:2 [▼
0 => "73"
1 => "78"
]
我不明白为什么没有使用助手将复选框值保存在数据库中。
尝试从我的模块设置中保存一些客户 ID:
数组:
$custs = Customer::getCustomers();
foreach ($custs as $key => $value) {
$options[] = array(
'id_customer' => (int)$value['id_customer'],
'infos' => $value['firstname'].' '.$value['lastname'].' | '.$value['email']
);
}
复选框:
'input' => array(
array(
'type' => 'checkbox',
'label' => $this->l('Customers'),
'desc' => $this->l('Select the Customers.'),
'name' => 'MY_MODULE_CUSTOMERS',
'values' => array(
'query' => $options,
'id' => 'id_customer',
'name' => 'infos',
),
),
)
$_POST 始终为空,但适用于其他输入。任何帮助将不胜感激。
谢谢。
你的代码是正确的,我试过了,这是结果 http://screencast.com/t/wfsW86iJj
- 您必须至少选中一个复选框。
在服务器上显示数据:
print_r($_POST); die();
更好的方法是使用 groupbox 但它相当困难,请查看 prestachop 的控制器目录中的 AdminCustomers 控制器 class,它有多个select 使用存储在单个字段中的关系 table 事件的组
如果您想简单一点,使用单个字段存储在数据库中,请查看完整代码和所有步骤:https://groups.google.com/forum/m/?hl=es#!topic/venenuxsarisari/z8vfPsvFFjk
开头别忘了加上那一行:
// aqui el truco de guardar el multiselect como una secuencia separada por comas, mejor es serializada pero bueh
$this->fields_value['MY_MODULE_CUSTOMERS[]'] = explode(',',$obj->id_employee);
这个 $obj 是编辑时加载的先前存储值的表示...从那个对象中,获取 multiselect 字段的存储值,存储为“1,3 ,4,6
并且在字段表单帮助程序输入列表中将 select 倍数定义为:
array(
'type' => 'checkbox',
'label' => $this->l('Select and employee'),
'name' => 'MY_MODULE_CUSTOMERS[]',
'required' => false,
'col' => '6',
'default_value' => (int)Tools::getValue('id_employee_tech'),
'values' => array(
'query' => $options,
'id' => 'id_customer',
'name' => 'infos',
),
),
然后也覆盖 post 过程
public function postProcess()
{
if (Tools::isSubmit('submitTallerOrden'))
{
$_POST['MY_MODULE_CUSTOMERS'] = implode(',', Tools::getValue('MY_MODULE_CUSTOMERS'));
}
parent::postProcess();
}
这个 make 在数据库中存储为“1,2,3”
我不认为它在 PS 文档中。但是通过一些代码检查,您可以在
中看到Backoffice/themes/default/template/helpers/form/form.tpl
<input type="checkbox" name="{$id_checkbox}" id="{$id_checkbox}" class="{if isset($input.class)}{$input.class}{/if}"{if isset($value.val)} value="{$value.val|escape:'html':'UTF-8'}"{/if}{if isset($fields_value[$id_checkbox]) && $fields_value[$id_checkbox]} checked="checked"{/if} />
{$value[$input.values.name]}
将属性 'val' 添加到选项。
$options[] = array(
'id_carrier' => $carrier['id_carrier'],
'name' => $carrier['name'],
'val' => $carrier['id_carrier'],
);
然后您获得了输入值所需的序列化。
"transportistas" => array:2 [▼
0 => "73"
1 => "78"
]