Prestashop 中的复选框值

Checkbox values in prestashop

我正在使用 prestashop 并尝试使用 HelperForm 从带有复选框的表单中获取值

所以我得到的是:

$fields_form[0]['form']= [
        'legend'=> [
            'title'=> $this->l('Indexation')
        ] ,
        'input'=>[
            [
                'type'=>'text',
                'label'=> $this->l('Base(s) à indexer'),
                'name'=>'options',
                'size'=>20,
                'required'=>true
            ]
        ],
        'submit'=>[
            'title' => $this->l('Save'),
            'class' => 'btn btn-default pull-right'
        ]
    ];

然后

$helper = new HelperForm();
[...]
$helper->toolbar_btn = array(
        'save' =>
            array(
                'desc' => $this->l('Save'),
                'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name.
                    '&token='.Tools::getAdminTokenLite('AdminModules'),
            ),
        'back' => array(
            'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'),
            'desc' => $this->l('Back to list')
        )
    );

    // Load current value
    $helper->fields_value['options'] = Configuration::get('options');

    return $helper->generateForm($fields_form);

在我的 getContent 中,我有:

$my_module_name = strval(Tools::getValue('options'));
return $my_module_name;

所以在那之前我没有遇到任何问题。我在文本输入中写 'test' 然后返回 'test' 但我不想要文本输入我想要一个复选框输入所以我改变了我的形式:

 $fields_form[0]['form']= [
        'legend'=> [
            'title'=> $this->l('Indexation')
        ] ,
        'input'=>[
            [
                'type'=>'checkbox',
                'label'=> $this->l('Base(s) à indexer'),
                'name'=>'options',
                'required'=>true,
                'values'=>[
                    'query'=>$options,
                    'id'=>'id',
                    'name'=>'name'
                ]
            ]
        ],
        'submit'=>[
            'title' => $this->l('Save'),
            'class' => 'btn btn-default pull-right'
        ]
    ];

$options 是:

$options = [
        [
            'id'=>1,
            'name'=>'test'
        ],
        [
            'id'=>2,
            'name'=>'test2'
        ]
    ];

在我的 getContent() 中:return (Tools::getValue('options')); 但是这样一来,什么也没有显示。

此外,如果我这样做 return sizeof(Tools::getValue('options)) 无论我用复选框勾选什么,它都会给我 1

首先你需要用[]设置字段名称

$fields_form[0]['form']= [
    'legend'=> [
        'title'=> $this->l('Indexation')
    ] ,
    'input'=>[
        [
            'type'=>'checkbox',
            'label'=> $this->l('Base(s) à indexer'),
            'name'=>'options[]',
            'required'=>true,
            'values'=>[
                'query'=>$options,
                'id'=>'id',
                'name'=>'name'
            ]
        ]
    ],
    'submit'=>[
        'title' => $this->l('Save'),
        'class' => 'btn btn-default pull-right'
    ]
];

那么,你的选项应该有一个值:

$options = [
    [
        'id'=>1,
        'name'=>'test',
        'val' => 1
    ],
    [
        'id'=>2,
        'name'=>'test2',
        'val' => 2
    ]
];

然后您可以通过以下方式获取检查值:

Tools::getValue('options')

编辑: 在 1.6 中,我们有助手的管理员 tpl:

{foreach $input.values.query as $value}
    {assign var=id_checkbox value=$input.name|cat:'_'|cat:$value[$input.values.id]}
    <div class="checkbox{if isset($input.expand) && strtolower($input.expand.default) == 'show'} hidden{/if}">
        {strip}
            <label for="{$id_checkbox}">
                <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]}
            </label>
        {/strip}
    </div>
{/foreach}

因此,要设置要返回的复选框值,我们需要传递 val:

{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}