【问题标题】:Magento and unsetting a custom boolean attributeMagento 并取消设置自定义布尔属性
【发布时间】:2009-12-09 05:44:45
【问题描述】:

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

'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 方法吗?

【问题讨论】:

    标签: magento attributes boolean street-address


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      我确实发现了一些 good resources 试图覆盖/重载(这两个术语都很常见)控制器/路由器。

      同样值得注意 -

      'frontend_input'=>'boolean',
      

      应该是

      'frontend_input'=>'checkbox',
      

      【讨论】:

      • 这在旧版本的 Magento 中可能是正确的,但目前(Magento 1.8),'checkbox' 不是有效的 fronted_input 类型,但 Boolean 是
      【解决方案3】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-29
        • 1970-01-01
        • 2010-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多