1

我已向客户地址实体添加了一个属性。属性设置代码如下——

'entity_type_id'=>$customer_address_type_id,
'attribute_code'=>'signature_required',
'backend_type'=>'int',
'frontend_input'=>'boolean',
'frontend_label' => 'Signature required',
'is_global' => '1',
'is_visible' => '1',
'is_required' => '0',
'is_user_defined' => '0',

我当时 -

  • 向 model\entity\setup.php 添加了属性
  • 在编辑表单上添加了一个 HTML 字段

我现在在选中复选框时将属性保存到数据库中。但是,当未选中复选框时,它不会被取消设置(我猜是因为如果未选中复选框输入不会被“发布”。

取消选中此选项的最佳方法是什么?我应该添加默认值 0 吗?或者在保存到控制器之前取消设置/删除属性?我应该向模型添加 get/set 方法吗?

4

3 回答 3

4

我今天遇到了类似的问题,发现各种指南很乏味,并通过使用“选择”而不是“复选框”进行更改并设置“源”来解决eav/entity_attribute_source_boolean它,从而给出一个简单的“是”/“否”下拉-down 并正确保存而无需修改。

于 2011-01-14T23:48:29.960 回答
3

最后,我在我的自定义模型中覆盖了 setData 方法。

我确实找到了一些关于尝试覆盖/重载(这两个术语都很常见)控制器/路由器的好资源。

还要注意——

'frontend_input'=>'boolean',

应该

'frontend_input'=>'checkbox',
于 2009-12-11T05:36:54.437 回答
0

你是对的,问题是未选中的复选框没有通过 POST 请求发送。

您可以通过在复选框之前放置一个值为“0”的隐藏表单输入来解决此问题,如下所示:

<input type='hidden' name='my_checkbox' value='0'>
<input type='checkbox' name='my_checkbox' value='1'>

现在,如果选中该复选框,它将发送一个值“1”,如果未选中,它将发送一个值“0”。

我应该注意这仅在 PHP 中是正确的,因为当发送两个相同的 POST 值时,它会采用最后一个。不同的服务器端语言可能会以不同的方式处理这个问题

于 2013-12-20T18:24:13.543 回答