下拉菜单2.12中可配置的产品属性排序顺序


9

下拉菜单的顺序与属性本身的顺序不一致。在属性大小内,我已订购新生儿0-3个月

并在下拉菜单中显示为0-3 Newborn

刚好在其他尺寸的几天后添加了新生儿尺寸,0-3个月后才进口了新生儿简单产品。关于如何获取下拉列表以遵循属性中列表的顺序的任何建议?我已经清除了缓存并重新编制了索引。我读到@Khoa TruongDinh遇到了同样的问题,但没有找到解决问题的方法,因此重新发布。


另外,尺寸产品0-3的属性产品已经存在,我将添加所有尺寸为Newborn的属性产品。
babywit

Answers:


14

我在前端遇到相同的属性选项排序问题,在检查此问题时发现,在获取属性选项时,默认情况下,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);
}

非常感谢您这样做,但是我并不精通php。我不确定要在何处添加修订。这是我从280-282获得的,并试图将其添加到;之前;在282,但这没有用。(280)第280章
babywit

如果您无法编辑代码,请替换一下
Jagdish Ram

是否有人编写了应用此补丁程序的扩展程序?
TheNorthern_Light

另外,这在2.1.9中似乎不起作用。
TheNorthern_Light

在2.1.14中,功能已移至Magento\ConfigurableProduct\Model\AttributeOptionProvider。乍一看看起来就解决了,尽管不确定可能的错误。
simonthesorcerer

3
  1. 转到可配置产品页面->编辑配置->单击下一步-下一步-下一步,不做任何更改
  2. 然后保存产品,它们应该井然有序。

刷新或保存产品?
Lasantha

使用300多种产品该怎么做?
Mohammed Joraid

实际上,仅打开可配置产品编辑页面,然后直接保存即可解决排序顺序。因此,1-打开产品2-单击保存。但是,如何在不手动处理所有产品并保存的情况下使此工作有效。我试图将所有产品批量添加到站点,希望它会触发保存事件,但是排序没有固定。使用MAG2.2.2
Mohammed Joraid

1

如果您是说Newborn是属性值,则需要转到Stores-> Attributes(Product),找到所需的属性,然后使用鼠标拖放选项的位置进行拖放。 在此处输入图片说明

生成关联产品时,可以设置下拉菜单本身的位置(大小,颜色,形状)。打开编辑表单-> 高级设置->编辑配置-属性值步骤,并通过拖放移动属性 在此处输入图片说明


对,就是这样。“在属性大小内,我已订购了新生儿0-3个月”,因此属性本身内部新生儿是0-3个月以上,在产品下拉列表中,新生儿是0-3个月。
babywit

据我所知,该属性本身的排序在magento 2.1.2中无法正常工作
babywit,2016年

任何人都不知道是什么导致了此问题,原因是属性的顺序未按属性中列出的顺序显示,或者是变通方法以使属性以正确的顺序显示?我想开设我的商店,但这使我发疯。
babywit


1

由于此问题在最新版本2.1.7中也仍然存在,因此您可以使用以下解决方法:

转到可配置产品页面->配置->删除所有简单产品

之后,按所需顺序再次添加它们:

手动添加产品->按名称过滤产品->按所需顺序添加简单产品


1

在v2.3.x中,您可以通过扩展选项来在可配置产品下拉选择器中按选项标签对属性的顺序进行排序

Magento\ConfigurableProduct\Model\AttributeOptionProvider

和使用

usort($data, function($a, $b) {
    return $a['option_title'] <=> $b['option_title'];
});

在getAttributeOptions()中对返回的选项数据数组$ data进行排序


您可以详细说明吗?
Kowsigan Atsayam
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.