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

  1. 您必须至少选中一个复选框。
  2. 在服务器上显示数据:

        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"
  ]