【问题标题】:Magento Create Product Attribute That Is An IntegerMagento 创建一个整数的产品属性
【发布时间】:2010-09-08 01:31:33
【问题描述】:

显然,您在购买企业版时从 Varien 获得的支持几乎一文不值,所以我希望这里的某个人可以带领我走向正确的方向。

在 Magento 中,我想创建一个 int 类型的产品属性。当我从管理面板创建属性时,它会将其创建为 varchar。

我最终要做的是创建一个总售出属性,以便我可以使用它来按类别显示中的大多数售出产品进行排序。它是 varchar 的问题在于,当您按此排序时,它会将其排序为字符串而不是数字。

Varien 告诉我,为了使它成为一个整数,我必须对数据库进行更新。在我看来,我必须将 eav_attribute 表中的 backend_type 列更改为 int,并且希望将值移动到 catalog_product_entity_int 表,而不是转到 catalog_product_entity_varchar 表。这有意义吗?以前有没有其他人这样做过?

既然我有这个问题,我应该期待 Varien 的支持吗?到目前为止,他们的支持似乎毫无用处。似乎问怎么做这么简单的事情没什么大不了的(尤其是我问他们怎么做,而不是为我做)

【问题讨论】:

    标签: php attributes magento


    【解决方案1】:

    我以前从未尝试过更改现有属性的类型,并且我尽量避免直接摆弄 mysql 数据库结构。这有点像在正在运行的桌面应用程序中直接更改内存位置的内容;您可以做到,但除非您确切知道自己在做什么,否则您可能会使某些东西处于不受支持的状态。此外,我无法证明这一点,但我很确定 EAV 实现的细节在产品的整个生命周期中已经出现,这意味着不同的版本会有不同的答案。

    如果您可以从头开始,我会add an attribute to the model programmatically(围绕“定义属性的键值对的最终数组”标题)。即使您不能从头开始,也可以通过编程方式创建一个整数属性并在前后对比您的数据库,以查看后端需要发生什么才能创建属性。

    【讨论】:

    • 比较数据库的好建议,我同意使用框架比直接使用数据库更好。另一个选项是打开 SQL 日志记录,以识别在创建属性并将其添加到属性集时执行的其他操作。关于 SQL 日志记录的论坛帖子:magentocommerce.com/boards/viewthread/19609 不要忘记在生产前关闭!
    【解决方案2】:

    您在eav_attribute 中更改backend_type 是正确的,但是这不会自动将属性值迁移到catalog_product_entity_int,您需要运行INSERT INTO SELECT query 到从catalog_product_entity_varchar 中获取您的价值观。

    如果您创建自己的模块(无论如何您都需要这样做来计算每个产品的总销售额),您可以通过 mysql-install 文件根据此 blog post 插入一个新的 int 类型属性。此外,module creator extension 将为您提供开始使用的模块框架。

    另一种选择是将属性保留为 varchar 并更改类别排序,以便将属性评估为 int。但我认为改变类型更安全、更有效。

    希望这会有所帮助, 京东

    【讨论】:

      【解决方案3】:

      关于你关于支持期望的第二个问题,它取决于协议的条款,它是否只涵盖错误修复、服务器和应用程序配置等。我认为支持协议编写是不寻常的您的自定义要求的新代码,但也许我错过了这一点。

      他们的webpage 明确表示不包括 = 代码开发、开发支持、自定义扩展等...

      干杯, 乔纳森

      【讨论】:

      • 我想我更惊讶的是,给我一点指导超出了服务协议的范围。创建一个数字属性似乎不是什么大不了的事。
      • 我完全同意这样做似乎很有帮助,但我猜他们可能会收到很多看似简单的请求,这会导致越来越多的要求。在支持发展方面实施一揽子规则比做出判断要容易得多。不为它辩护,只是想看看他们的 POV。
      【解决方案4】:

      我遇到了完全相同的问题。另一个问题是我不想丢失属性值。

      首先您需要通过magento数据流系统(System/ImportExport/Profiles)导出具有属性的产品。您需要创建配置文件以导出并在 Export: 'only mapped fields' 中标记。您可以使用 sku 和要更改的属性作为数据库中的整数。

      稍后您应该在任何模块中创建 sql 安装文件以更改数据库:

      mysql4-install-0.1.0.php

      $installer->startSetup();
      $installer->updateAttribute('catalog_product', '<<your_attribute_code>>', array(
      'backend_type'    => 'int',
      ));
      $this->endSetup();
      ?>
      

      稍后重新索引 product_attribute 和 product_flat_data 非常重要。

      下一步是标记所有使用此属性并使用“更新属性”操作的产品,例如,您应该将值设置为 100。

      现在再次重新索引!

      并通过数据流中的另一个配置文件导入文件。

      祝你好运!

      【讨论】:

        猜你喜欢
        • 2014-02-10
        • 1970-01-01
        • 2016-02-03
        • 2013-07-04
        • 2012-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多