드롭 다운 2.12에서 구성 가능한 제품 속성 정렬 순서


9

드롭 다운 순서는 속성 자체의 순서와 일치하지 않습니다. 속성 크기 내에서 신생아 0-3 개월을 주문했습니다.

드롭 다운에서 0-3 신생아로 표시됩니다

신생아 크기는 다른 크기 후에 며칠 후에 추가되었고 신생아 단순 제품은 0-3 개월 후에 수입되었다. 속성 내 목록의 순서를 따르기 위해 드롭 다운 순서를 얻는 방법에 대한 제안 사항이 있습니까? 캐시를 지우고 다시 색인을 생성했습니다. @Khoa TruongDinh도 같은 문제가 있었지만 문제에 대한 해결책을 찾지 못했기 때문에 다시 게시했습니다.


또한 크기가 0-3 인 속성 제품이 이미 존재하며 크기가 Newborn 인 모든 속성 제품을 추가하고 있습니다.
babywit

답변:


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 * 아리따움
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이 속성 값임을 의미하는 경우 상점-> 속성 (제품) 으로 이동하여 필요한 속성을 찾은 후 마우스 변경 옵션으로 끌어서 놓기를 사용하십시오. 여기에 이미지 설명을 입력하십시오

관련 제품을 생성 할 때 드롭 다운 위치 (크기, 색상, 모양)를 설정할 수 있습니다. 편집 양식 열기-> 고급 설정-> 구성 편집-속성 값 단계 및 끌어서 놓기 이동 속성의 도움으로 여기에 이미지 설명을 입력하십시오


네 맞습니다. "속성 크기 내에는 Newborn 0-3 mo을 주문했습니다"따라서 속성 자체에는 Newborn이 ABOVE 0-3 mo이고 제품 드롭 다운에는 0-3 mo ABOVE Newborn이 표시됩니다.
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'];
});

getAttributeOptions ()에서 반환 된 옵션 데이터 배열 $ data를 정렬하려면


좀 더 정교하게 할 수 있습니까?
Kowsigan Atsayam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.