【问题标题】:Magento Can't mass update attributes for Required Field ErrorMagento 无法批量更新必填字段错误的属性
【发布时间】:2013-02-15 12:04:23
【问题描述】:

我希望有人能对此有所了解:

我正在使用 Magento 中的搜索工具查找具有特定属性的产品,然后选择这些产品并使用“更新属性”功能将数据添加到(更新)不同的属性字段。

在某些情况下,这可以正常工作,记录新的属性数据并且一切正常。在其他选择中,当我尝试保存新属性数据时,会出现红色警告“这是必填字段”。果然,它指定的字段是必填字段,但由于我没有更新该特定字段,所以我没有勾选它下面的复选框,该字段应该被忽略。

如果我为突出显示的字段关闭“必填字段”选项,那么新的属性数据会被保存,但是:它会擦除其他属性负载中的数据,这意味着我会丢失我的产品属性中有价值的数据。似乎它在我一天中使用它的前几次有效,然后它吐出它的假人并提出所需的字段问题。

我在 Google Chrome 和 Firefox 上都试过了。正如我所说,有时它会起作用,有时它不会。我一次选择 20-100 种产品。我什至尝试只选择一种产品,但仍然会在该产品上遇到同样的错误。

我正在使用 Magento 1.7.0.2

去年我们使用 1.6 时,我确实遇到过属性数据被擦除的类似问题,但我似乎记得这是一个 Magento 错误,当我们升级到新版本时已修复。

谁能解释为什么会发生这种情况?搜索引擎中没有任何内容,这真的让我放慢了速度!

【问题讨论】:

  • 如果您的某个产品没有此必需属性的值,您似乎无法为另一个属性批量更新它。确保您的所有产品都有此属性的值,或为其设置默认值。
  • 感谢您的回复。它给了我一个短暂的希望,但不幸的是,确保每个必需的属性都有一个默认值是行不通的。我确实做了一些较早的测试,并尝试使用批量更新属性功能仅更新一种产品的一个属性,但它仍然出现同样的问题。还有其他建议吗?

标签: magento attributes required


【解决方案1】:

问题是属性在更新属性页面中默认没有被禁用,因此需要一个值。

为什么?

很可能是由于在您的属性上方某处出现故障属性。

选项1。由于我不知道是什么属性或属性问题,所以破解 js/mage/adminhtml/product.js 并更改此函数以忽略错误属性。

function disableFieldEditMode(fieldContainer) {
    try {
        $(fieldContainer).disabled = true;
        if ($(fieldContainer + '_hidden')) {
            $(fieldContainer + '_hidden').disabled = true;
        }
    }
    catch(exception) {
    }
}

选项 2. 从产品中删除错误属性(您可能需要删除限制)。

update eav_attribute set is_user_defined = 1 where attribute_code like 'foo_bar';

选项3.修复错误属性。在我的例子中,有问题的模块是 AW_Onsale。

它试图渲染一个不存在的前端模型:onsale/system_entity_form_element_position

select attribute_code, frontend_model from eav_attribute where attribute_code like '%aw_os_%';

aw_os_product_position | onsale/entity_attribute_frontend_position

update eav_attribute set frontend_model = null where attribute_code like '%aw_os_product_position%';
update eav_attribute set frontend_model = null where attribute_code like '%aw_os_category_position%';

【讨论】:

  • 嗨,Ben,我现在才看到你对此的回复,因为我从未解决过这个问题,但只是想我会再看看它。无论如何,我也使用 AW onsale ,所以认为选项 3 可能是我前进的方向。我运行了 SQL,它改变了 2 个条目,但不幸的是仍然没有运气。请问你怎么知道有问题的模块是哪个?我猜我可能在某个地方隐藏了另一个令人讨厌的东西。
  • 尝试选项 1 并在 catch 语句中添加对 console.log(fieldContainer) 的调用,然后使用 chrome 检查器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 2012-12-10
  • 1970-01-01
  • 2016-06-13
相关资源
最近更新 更多