Magento 可配置产品问题

Magento 可配置产品问题,magento,Magento,我在配置产品时遇到了一个问题。我使用了此链接,但在相关选项卡中,产品未显示 感谢并问候您可以查看的两件事: 您确定要关联到可配置产品的简单产品实际上具有使可配置产品可配置的属性值吗?因此,如果您根据“颜色”制作了一个可配置的产品,那么简单的产品是否有“颜色”的值 当您查看相关产品选项卡时,看到那里的空白网格,您是否尝试重置过滤器,或者在第一列中选择“否”或“否”?如果设置为“是”,则仅查找已关联的产品 可配置产品链接在magento中如何工作? 摆脱可配置产品与其简单对应产品的链接的束缚?让我

我在配置产品时遇到了一个问题。我使用了此链接,但在相关选项卡中,产品未显示


感谢并问候您可以查看的两件事:

  • 您确定要关联到可配置产品的简单产品实际上具有使可配置产品可配置的属性值吗?因此,如果您根据“颜色”制作了一个可配置的产品,那么简单的产品是否有“颜色”的值
  • 当您查看相关产品选项卡时,看到那里的空白网格,您是否尝试重置过滤器,或者在第一列中选择“否”或“否”?如果设置为“是”,则仅查找已关联的产品
可配置产品链接在magento中如何工作? 摆脱可配置产品与其简单对应产品的链接的束缚?让我们来解释一下Magento是如何联系他们的。。。以及为什么它有时不能像预期的那样工作

要理解的第一点是应用程序如何管理数据持久性。正如预期的那样,链接存储在数据库中。以为是在目录与产品的关系中?你错了。尊重法师的精神应该太简单了:)

目录产品关系与目录产品超级表 我不会告诉你,目录与产品的关系是无用的——事实上,它一定是为了某些东西而存在的。但是从版本1.5+,这不是存储链接的地方,我无法解释它的目的是什么

第一步 链接过程的第一步是定义可配置产品的可配置属性。假设我们正在从具有几个全局选择属性的属性集创建一个新的可配置产品

如果您试图访问您的可配置产品,应用程序将使用与每个属性相关联的复选框列表,以一种形式询问您哪些产品应用作可配置属性。通过选择一些并保存产品,您可以按属性(产品id和属性id之间的关联)在目录\u产品\u超级\u属性中插入一行

第二步 第二步是将自身与相关的简单产品链接。这一步有点复杂,因为它意味着对数据库内容进行一些检查,我们将在下面进一步详细介绍。需要记住的一些规则:

  • 只有与当前可配置产品具有相同属性集的产品
  • 必须为可配置属性定义选项
  • 对于给定的可配置属性组合,只能链接一个简单属性
  • simple可以根据需要链接到任意多个可配置文件
然后,当我们转到可配置的关联产品选项卡时会发生什么?不要急着在显示的列表中看不到任何简单的对应产品–默认情况下,其过滤器配置为仅显示已链接的产品。以下是幕后发生的事情:

  • 应用程序将检查目录产品超级属性表,并返回其中为当前产品定义的每个相应属性id(我们的可配置属性)
  • 从它们中,它将检查eav_属性,以获得有关它们的一些详细信息–在哪些属性中是后端_类型,这是本说明中更重要的部分
  • 同时,目录产品超级链接表也被选中。任何与当前产品关联的产品都是潜在的关联产品
  • 对于每个属性,应用程序检查每个可能链接的产品的目录\产品\实体\后端\类型}中是否存在值。请注意,如果给定的产品不存在任何价值,那么它将不会被验证,也不会作为潜在链接或有效链接,即使它已经被链接(我们将在下面看到它对属性创建的含义)
  • 若要继续,只有具有有效值的产品才可显示和有效链接/链接。请注意,所有组合都必须具有有效值–如果可配置的属性中有任何属性为none,游戏结束,您的简单产品与其可配置的对应产品之间将没有任何链接

    我们应该认为这没问题,现在一切都会好起来,因为我们知道数据库中的一切是如何工作的。如果您总是从应用程序的后台创建属性,这是正确的。但是,由于编写属性脚本是一种非常常见的处理方式,所以您很可能会遇到第二种情况,这意味着一个潜在的巨大问题

    通过编程创建的属性和。。。见鬼!?!此属性已更改后端类型!
    • 编辑说明:当使用eav/实体\属性\源\表源模型时,这种情况会发生
    这是我个人遇到的麻烦。若您检查数据库中的属性后端模型(仅针对选定属性–我们不关心哪些属性不可用作可配置的属性),您将看到一些varchar、一些int。。。简言之,有多个,我们完全可以期待它们中的任何一个都能起作用

    他们也这样做了。因为您没有决定从后台向属性添加选项,或者需要单击属性页面上的«保存»按钮的任何其他内容

    问题是,当你保存你的属性时,Magento,在它的伟大善良中,问问自己你要他保存的属性是什么类型的。关键是,在做其他事情之前,这是一个选择。而select有很多选项。和选项具有id。在任何情况下,这些值都将放在目录\产品\实体\后端\类型}中。标签只是被正确地忽略了(它存储在正确的表中,不会影响那里的任何东西)。仅使用id

    还有什么
    -- Check existing entries to not duplicate
        SELECT  ea.attribute_code,
            count(*)
        FROM eav_attribute as ea
        INNER JOIN catalog_product_entity_int as cpei
        ON ea.attribute_id = cpei.attribute_id
        WHERE ea.attribute_code IN(
            {attributeCodesList}
        )
        GROUP BY ea.attribute_code
    
    -- Duplicating missed selects from varchat entity table to int
    INSERT INTO catalog_product_entity_int (entity_type_id, attribute_id, store_id, entity_id, value)
    SELECT  cpev.entity_type_id,
        cpev.attribute_id,
        cpev.store_id,
        cpev.entity_id,
        cpev.value
    FROM eav_attribute as ea
    INNER JOIN catalog_product_entity_varchar as cpev
    ON ea.attribute_id = cpev.attribute_id
    WHERE ea.attribute_code IN(
        {attributeCodesList}
    )
    
    -- Update missed select attributes from varchar backend type to int one
    UPDATE  eav_attribute as ea 
    SET     ea.backend_type = 'int'
    WHERE   ea.attribute_code IN (
        {attributeCodesList}
    )
    
    -- Kill old varchar in varchar entity table
    DELETE FROM catalog_product_entity_varchar
    WHERE attribute_id IN (
        SELECT ea.attribute_id
        FROM eav_attribute as ea
        WHERE ea.attribute_code IN (
            {attributeCodesList}
        )
    )