【问题标题】:Magento import reset every 'use default config' for multistoresMagento 导入为多商店重置每个“使用默认配置”
【发布时间】:2013-07-02 15:31:50
【问题描述】:

Magento 导入/导出功能还有很多不足之处。

我们最近尝试更新 Magento 多商店设置的批发商店的所有价格。我之前只用一种产品对此进行了测试,效果很好。

零售店的价格为 X,批发店的价格为 Y。两种产品在前端和后端都正确显示。

然后,我继续对所有产品应用相同的流程,更新 CSV 中的所有批发价格,除了将批发应用到商店列之外,其他所有内容都保持不变。

导入后,Magento 现在决定清除每个批发商店的“使用默认配置”设置,这几乎是所有产品中除价格之外的所有内容。所以现在,批发商店中没有显示任何产品,因为它们都没有名称、描述、税级、可见性、状态(等等)。

即使我完全按照 Magento 在一天开始时向我吐出的所有内容重新导入 CSV,它仍然不会让商店恢复到原来的样子。它内置的导入/导出功能刚刚对整个系统进行了完整的哈希处理,这已经花了我 3 周的时间在 Excel 中使用无数公式和宏对产品数据进行排序。

我希望有一种快速简便的方法可以在某处恢复批发商店的“使用默认配置”?非常感谢您的帮助。

刚刚遇到this forum post,这是对我们刚刚遇到的确切问题的另一种解释。虽然它没有答案,但认为它可能是解决同一问题的有用方法。

【问题讨论】:

  • 嗨@zigojacko 你有没有设法真正解决这个问题?我遇到了同样的问题,尽管数据库更新将删除任何有更改(并且需要更改)的属性。
  • 嗯,@JoryHogeveen 是 this help 吗?我没有测试过它,所以不能保证它的可靠性。
  • 嗨@zigojacko 回复有点晚,但我通过将所有没有内容(因此设置为默认值)的参数设置为false,在导入工具中找到了答案。这将触发 Magento 中的“使用默认值”。

标签: magento magento-1.7


【解决方案1】:

最简单的清理方法是使用“更新属性”批量操作。

到目录->管理产品。 如果需要过滤。 点击网格左上角的“全选”链接。 下拉操作以选择“更新属性”并点击提交(网格右上角)

此时,您正在批量编辑您选择的所有产品。 在左上角选择您要编辑的商店视图。

对于您要更新的每个属性,勾选“更改”,然后勾选“使用配置设置”框。

如果您对编辑感到满意,请点击右上角的“保存”按钮。

在代码中

您可以像这样使用“catalog/product_action”模型实现相同的目标。

Mage::getSingleton('catalog/product_action')->updateAttributes($arrayIds, array('attribute_code' => 'Desired Attribute Value'), $storeId);

其中 $arrayIds 是一个产品 ID 数组。这比迭代产品集合和保存单个项目要快得多。

【讨论】:

  • 通过批量属性方法,在批发商店视图下批量编辑所有价格时,有一个“更改”复选框但没有“使用默认配置”复选框 - 可能是因为我们设置了价格范围到网站而不是系统配置中的全局?谢谢。
  • 我提议这样做是为了让所有“使用配置设置”重新启用非价格相关属性。您不能真正使用它来设置价格,因为您正在一次编辑所有项目(除非所有项目由于某种原因具有相同的价格)。
  • 要“批量更新”价格,您以后应该使用 PHP 脚本而不是产品导入“功能”。编写一个脚本来查看 SKU、商店、价格表的 CSV 并仅更新一个属性相对容易。
  • 您说“对于您要更新的每个属性,请勾选“更改”,然后勾选“使用配置设置”框。” - 我以为您的意思是使用这些复选框从根本上重置并将第二个商店恢复为“使用默认配置”?抱歉,如果不是这样,我一定是误会了。
  • 抱歉,我使用了“checkoff”这个词。对于您要更改的每个属性,您需要“检查”“更改”输入。然后,您可以将该属性修改为您想要将所有产品设置为的任何内容。 IE。选中“更改”的每个属性都会在保存时更新为该页面上的任何属性。
【解决方案2】:

实际上设法使用与@Jared Kipe 的方法不同的方法解决了这个问题,尽管他继续评论他的方法,因为毫无疑问,它会比我的更安全、更实用。

在 MySQL 数据库中,我从以下表中删除了与相关store_id 相关的所有记录:-

catalog_product_entity_datetime
catalog_product_entity_decimal
catalog_product_entity_gallery
catalog_product_entity_group_price
catalog_product_entity_int
catalog_product_entity_media_gallery
catalog_product_entity_media_gallery_value
catalog_product_entity_text
catalog_product_entity_tier_price
catalog_product_entity_varchar

当像我一样处理数千条记录时,执行查询来处理这个问题要快得多,例如:-

DELETE FROM `db_name`.`catalog_product_entity_*` WHERE `store_id` = 2;

(您将db_name 替换为您的数据库名称,将* 替换为表中的每个附加名称。

这样可以确保对于store_id“2”,所有产品配置都重置为“使用默认配置”。

我很想收到其他答案并进行测试,以确保此处突出显示解决我的原始问题的最佳方法以供将来使用。实际上,我认为我在 Magento 中遇到了一个错误,因为我看不出导入过程如何根据导出的 CSV 中的最小(如果有的话)更改来擦除多商店的所有产品数据。值得学习的一课是,按照@Jared Kipe 的建议编写脚本可能会证明是最好的方法,并且可能会导入数据流(我刚刚创建了一个自定义脚本来更新所有批发定价,顺便说一下,它运行得非常完美)。

【讨论】:

    【解决方案3】:

    您可以使用 core_block_abstract_to_html_before adminhtml 事件为管理员批量更新表单中的每个属性添加所需的复选框。

    然后您需要使用 catalog_product_attribute_update_before 事件从 EAV 表中删除特定商店视图的值,仅适用于具有您之前使用 core_block_abstract_to_html_before 注入的复选框的那些属性strong> 设置为选中。

    原答案:https://magento.stackexchange.com/a/45229/16724

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2018-11-30
      • 2012-03-13
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多