J'ai rencontré le même problème de tri des options d'attribut à l'avant, Comme j'ai vérifié ce problème et constaté que lors de la récupération des options d'attribut, il n'y a pas de filtre de tri ajouté par défaut dans la requête dans Magento 2.1.2, donc pour résoudre ce problème, pour ajouter le code ci-dessous pour ajouter la commande ORDER By dans la fonction getAttributeOptions sur la ligne n ° 282 dans le fichier: vendor / magento / module-configurable-product / Model / ResourceModel / Product / Type / Configurable.php Maintenant, cela fonctionne bien pour moi.
->joinInner(
['attribute_opt' => $this->getTable('eav_attribute_option')],
'attribute_opt.option_id = entity_value.value',
[]
)->order(
'attribute_opt.sort_order ASC'
);
Si vous ne pouvez pas modifier le code, veuillez remplacer cette fonction getAttributeOptions par le code ci-dessous:
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);
}