Answers:
我在前端遇到相同的属性选项排序问题,在检查此问题时发现,在获取属性选项时,默认情况下,Magento 2.1.2中的查询中未添加排序过滤器,因此需要解决此问题添加以下代码以在文件的第282行的getAttributeOptions函数中添加ORDER By:文件vendor / magento / module-configurable-product / Model / ResourceModel / Product / Type / Configurable.php现在,对我来说工作正常。
->joinInner(
['attribute_opt' => $this->getTable('eav_attribute_option')],
'attribute_opt.option_id = entity_value.value',
[]
)->order(
'attribute_opt.sort_order ASC'
);
如果无法编辑代码,请使用以下代码替换此getAttributeOptions函数:
public function getAttributeOptions($superAttribute, $productId)
{
$scope = $this->getScopeResolver()->getScope();
$select = $this->getConnection()->select()->from(
['super_attribute' => $this->getTable('catalog_product_super_attribute')],
[
'sku' => 'entity.sku',
'product_id' => 'product_entity.entity_id',
'attribute_code' => 'attribute.attribute_code',
'value_index' => 'entity_value.value',
'option_title' => $this->getConnection()->getIfNullSql(
'option_value.value',
'default_option_value.value'
),
'default_title' => 'default_option_value.value',
]
)->joinInner(
['product_entity' => $this->getTable('catalog_product_entity')],
"product_entity.{$this->getProductEntityLinkField()} = super_attribute.product_id",
[]
)->joinInner(
['product_link' => $this->getTable('catalog_product_super_link')],
'product_link.parent_id = super_attribute.product_id',
[]
)->joinInner(
['attribute' => $this->getTable('eav_attribute')],
'attribute.attribute_id = super_attribute.attribute_id',
[]
)->joinInner(
['entity' => $this->getTable('catalog_product_entity')],
'entity.entity_id = product_link.product_id',
[]
)->joinInner(
['entity_value' => $superAttribute->getBackendTable()],
implode(
' AND ',
[
'entity_value.attribute_id = super_attribute.attribute_id',
'entity_value.store_id = 0',
"entity_value.{$this->getProductEntityLinkField()} = "
. "entity.{$this->getProductEntityLinkField()}",
]
),
[]
)->joinLeft(
['option_value' => $this->getTable('eav_attribute_option_value')],
implode(
' AND ',
[
'option_value.option_id = entity_value.value',
'option_value.store_id = ' . $scope->getId(),
]
),
[]
)->joinLeft(
['default_option_value' => $this->getTable('eav_attribute_option_value')],
implode(
' AND ',
[
'default_option_value.option_id = entity_value.value',
'default_option_value.store_id = ' . \Magento\Store\Model\Store::DEFAULT_STORE_ID,
]
),
[]
)->where(
'super_attribute.product_id = ?',
$productId
)->where(
'attribute.attribute_id = ?',
$superAttribute->getAttributeId()
)->joinInner(
['attribute_opt' => $this->getTable('eav_attribute_option')],
'attribute_opt.option_id = entity_value.value',
[]
)->order(
'attribute_opt.sort_order ASC'
);
return $this->getConnection()->fetchAll($select);
}
Magento\ConfigurableProduct\Model\AttributeOptionProvider
。乍一看看起来就解决了,尽管不确定可能的错误。
如果您是说Newborn是属性值,则需要转到Stores-> Attributes(Product),找到所需的属性,然后使用鼠标拖放选项的位置进行拖放。
生成关联产品时,可以设置下拉菜单本身的位置(大小,颜色,形状)。打开编辑表单-> 高级设置->编辑配置-属性值步骤,并通过拖放移动属性
目前在Magento 2中是一个已知问题。从2.1.4版开始,仍然是一个问题。
这是GitHub问题:https : //github.com/magento/magento2/issues/7441
由于此问题在最新版本2.1.7中也仍然存在,因此您可以使用以下解决方法:
转到可配置产品页面->配置->删除所有简单产品
之后,按所需顺序再次添加它们:
手动添加产品->按名称过滤产品->按所需顺序添加简单产品。
在v2.3.x中,您可以通过扩展选项来在可配置产品下拉选择器中按选项标签对属性的顺序进行排序
Magento\ConfigurableProduct\Model\AttributeOptionProvider
和使用
usort($data, function($a, $b) {
return $a['option_title'] <=> $b['option_title'];
});
在getAttributeOptions()中对返回的选项数据数组$ data进行排序