全新安装Magento 1.9.1 .
Magento忽略了Catalogue-> Attributes-> Manage Attributes-> Manage Labels / Options中为可配置产品下拉列表设置的属性位置 . 相反,它使用产品ID来确定列表顺序 .
比较了以下文件/功能,除了小额税收计算外,自1.7.0.2以来,没有任何代码发生过变化 .
法师/目录/型号/产品/类型/ Configuarable.php:
public function getConfigurableAttributes($product = null)
法师/目录/型号/产品/ Option.php:
public function getProductOptionCollection(Mage_Catalog_Model_Product $product)
法师/目录/座/产品/浏览/类型/ Configuarable.php:
public function getJsonConfig()
我还在一个实时网站的副本数据库上进行了测试,所有属性排序都基于产品ID .
要复制 .
-
创建属性 - 颜色
-
添加标签 - 黑色,红色,绿色,蓝色
-
保存属性 .
-
使用上述顺序的属性创建可配置且简单的关联产品 .
编辑属性并更改标签位置 . 蓝色0,绿色1,红色3,黑色4
查看产品时,Magento仍会按产品ID对属性进行排序,并忽略位置 .
5 回答
Meogi的答案有效,但不是完美的答案,因为它只会对前端的选项进行排序 . 尝试从管理面板为可配置产品创建订单 . 您仍将获得错误排序的属性选项列表 .
相反,您可以将app / code / core / Mage / Catalog / Model / Resource / Product / Type / Configurable / Attribute / Collection.php复制到本地文件夹app / code / local / Mage / Catalog / Model / Resource / Product / Type /Configurable/Attribute/Collection.php并应用此补丁:
如果您对将核心文件复制到本地文件夹犹豫不决,那么我可以创建一个快速模块,
<rewrite>
这个Collection.php文件,只需覆盖_loadPrices()函数并引入此修复程序 .Notice: 此处列出的解决方案在此方法之前扩展了Magento 's core library. I reviewed Magento' s源代码中的块类文件,并确定没有一个好的事件要遵守以避免这种方法 . 如果在未来版本的Magento中解决了这个排序问题,您可以通过在其app / etc / modules XML文件中禁用扩展来撤消这些更改 .
Step 1: 创建文件 app/etc/modules/FirstScribe_CatalogOptionSortFix.xml
内容:
Note: 对于步骤2和3,根据需要为这些文件创建目录 . 例如,您可能已经拥有目录 app/code/local ,或者您可能没有,具体取决于您在网站上已安装的扩展程序 .
Step 2: 创建文件 app/code/local/FirstScribe/CatalogOptionSortFix/etc/config.xml
内容:
Step 3: 创建文件 app/code/local/FirstScribe/CatalogOptionSortFix/Block/Product/View/Type/Configurable.php
内容:
Step 4: 如果启用,请在管理面板的系统 - >缓存管理下刷新Magento的"Configuration"缓存类型 .
Extension overview
扩展Mage_Catalog_Block_Product_View_Type_Configurable类 .
添加一个方法,通过从数据库中提取此信息,按
position
值对选项进行排序 .在收集属性选项后,重写getJsonConfig方法以调用我们的新函数 .
只是为了加上我的两分钱,其他两个答案很好地指出了我的方向,但我想我会在源头而不是块表示点攻击它 .
您可以通过扩展
Mage_Catalog_Model_Resource_Product_Type_Configurable_Attribute_Collection
模型的_loadPrices()
方法来实现相同的结果,尽管名称是进行更改的地方(可能是为了提高性能),导致属性按ID排序,而不是按相关性排序 .似乎已经进行了更改以避免嵌套
foreach
语句,但也会丢失正确的顺序 . 此解决方案稍微修改更新的逻辑以跟踪属性选项,然后根据原始顺序执行另一个循环以实际执行添加 .这是一个类似于meogi's answer above的调整后的演练:
步骤1:注册新模块
注意:如果您已经有一个,请重新使用现有的一个 .
步骤2:创建模块的配置
步骤3:添加资源模型扩展
步骤4:清除缓存
For reference ,
git diff
中核心类的实际更改将在下面(不要直接编辑核心文件!):This is also on GitHub如果有人想要它作为参考 .
编辑:我也是logged this as a bug with Magento .
根据Magento的说法,这个问题将在CE 1.9.3.0中修复
资料来源:https://www.magentocommerce.com/bug-tracking/issue/index/id/413
覆盖属性集合并添加代码更改,如下所示 . 这将纠正排序问题以及加载高选项值的问题 . “问题在于价格问题,所以评论说”
覆盖类Mage_Catalog_Block_Product_View_Type_Configurable检查函数public function getJsonConfig()change $ prices = $ attribute-> getPrices(); to $ prices = $ this - > _ sortPrices($ attribute-> getPrices());功能如下