Порядок сортування атрибутів продукту, що настроюється, у спадному меню 2.12


9

Порядок випадаючого не відповідає порядку порядку самого атрибута. У межах розміру атрибуту я замовив Новонародженому 0-3 місяці

а у спадному меню відображається як 0-3 новонародженого

розмір Новонародженого додавали через кілька днів після інших розмірів, а прості товари для новонароджених були імпортовані після 0-3 місяця. Будь-які пропозиції, як отримати порядок випадаючого списку, щоб слідкувати за порядком списку в межах атрибута? Я очистив кеш і переуклав. Я читав, що у @Khoa TruongDinh був той самий випуск, але не бачив вирішення питання, тому репостую.


також продукти атрибутів розміром 0-3 вже існують, і я додаю всі атрибутичні продукти з розміром Новонародженого.
babywit

Відповіді:


14

Я зіткнувся з тією ж проблемою сортування параметрів атрибутів на передньому кінці, оскільки я перевірив цю проблему і виявив, що під час вибору параметрів атрибутів у запиті за замовчуванням у Magento 2.1.2 не доданий фільтр сортування, тож для вирішення цієї проблеми потрібно щоб додати код нижче, щоб додати ЗАМОВЛЕННЯ за функцією getAttributeOptions на рядку № 282 у файлі: vendor / magento / module-configigurable-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 'attribute.attribute_id =?', 281 $ superAttribute-> getAttributeId () 282);
babywit

якщо ви не в змозі відредагувати код, будь ласка, замініть це
Jagdish Ram

Хтось написав розширення, яке застосовує цей патч?
TheNorthern_Light

Крім того, це, здається, не працює в 2.1.9.
TheNor Northern_Light

У 2.1.14 функціонал перейшов до Magento\ConfigurableProduct\Model\AttributeOptionProvider. Здається, це вирішено на перший погляд, але не впевнений у можливих помилках.
simonthesorcerer

3
  1. Перейдіть на сторінку Налаштований продукт -> Редагувати конфігурацію -> Клацніть Далі -Наступний - Далі та нічого не змінюйте
  2. Потім збережіть продукт, і вони повинні бути в порядку.

Оновити або зберегти продукт?
Ласента

Як це зробити з 300+ продуктами?
Мохаммед Жораїд

Насправді лише відкриваючи налаштовану сторінку редагування продукту, а потім просто зберігаючи, безпосередньо фіксує порядок сортування. Отже 1- Відкрийте продукт 2 Клацніть зберегти. Але як зробити цю роботу, не переходячи до всіх продуктів вручну та зберігаючи їх. Я намагався масово додати весь продукт до сайту, сподіваючись, що це спровокує подію збереження, але сортування не було виправлено. використовуючи MAG2.2.2
Мохаммед Джораїд

1

Якщо ви маєте на увазі, що для новонародженого є значенням атрибута, вам потрібно перейти до Магазини -> Атрибути (продукт) , знайти потрібний атрибут, а також скористатися перетягуванням та переміщенням миші з позицією зміни параметрів. введіть тут опис зображення

Положення самих спадів (розмір, колір, форма) можна встановити при створенні асоційованих продуктів. Відкрити форму редагування -> Розширені налаштування -> Редагувати конфігурації - Крок значень атрибутів та за допомогою перетягування атрибутів переміщення введіть тут опис зображення


Так саме. "У межах розміру атрибуту я впорядкував новонародженого 0-3 місяці" Отже, всередині самого атрибута Новонароджене НАДІЄТЬСЯ 0-3 м., А в спадному пункті продукту він відображається з 0-3 м. ПОНЯТЬ Новонароджене.
babywit

Наскільки я можу сказати, впорядкування в межах самого атрибута не працює належним чином у magento 2.1.2
babywit

Хтось має уявлення про те, що спричиняє цю проблему, а порядок атрибутів не відображається в порядку, зазначеному в атрибуті, або вирішенні способу відображення атрибутів у правильному порядку? Я хочу запустити свій магазин, але це рухає мене батти.
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'];
});

Сортувати повернутий параметр масиву даних $ data в getAttributeOptions ()


Ви можете детальніше розробити це?
Коусіган Ацаям
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.