Thứ tự sắp xếp thuộc tính sản phẩm có thể định cấu hình trong Dropdown 2.12


9

Thứ tự thả xuống không phù hợp với thứ tự của thuộc tính. Trong kích thước thuộc tính, tôi đã đặt hàng Sơ sinh 0-3 tháng

và trong phần thả xuống, nó hiển thị là 0-3 Sơ sinh

kích thước Newborn được thêm vào một vài ngày sau khi các kích thước khác và các sản phẩm đơn giản cho trẻ sơ sinh được nhập khẩu sau 0-3 tháng. Bất kỳ đề xuất về làm thế nào để có được thứ tự thả xuống để làm theo thứ tự của danh sách trong thuộc tính? Tôi đã xóa bộ nhớ cache và reindexed. Tôi đọc được rằng @Khoa TruongDinh có cùng một vấn đề nhưng không thấy giải pháp cho vấn đề này nên đang đăng lại.


Ngoài ra, các sản phẩm thuộc tính có kích thước 0-3 đã tồn tại và tôi đang thêm tất cả các sản phẩm thuộc tính có kích thước Newborn.
babywit

Câu trả lời:


14

Tôi đã phải đối mặt với vấn đề sắp xếp tùy chọn thuộc tính tương tự ở front-end, vì tôi đã kiểm tra vấn đề này và thấy rằng trong khi tìm nạp các tùy chọn thuộc tính, không có bộ lọc sắp xếp nào được thêm vào trong truy vấn theo mặc định trong Magento 2.1.2, vì vậy để khắc phục vấn đề này cần để thêm mã dưới đây để thêm ĐẶT HÀNG Theo chức năng getAttributionOptions trên dòng số 282 trong tệp: nhà cung cấp / magento / mô-đun cấu hình-sản phẩm / Mô hình / ResourceModel / Sản phẩm / Loại / Cấu hình. Bây giờ, nó hoạt động tốt với tôi.

->joinInner(
        ['attribute_opt' => $this->getTable('eav_attribute_option')],
        'attribute_opt.option_id = entity_value.value',
        []
    )->order(
        'attribute_opt.sort_order ASC'
    );

Nếu không thể chỉnh sửa mã thì vui lòng thay thế hàm getAttributionOptions này bằng mã như sau:

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);
}

cảm ơn bạn rất nhiều vì điều này nhưng tôi không rành về php. Tôi không chắc chắn nơi để thêm vào sửa chữa của bạn. Đây là những gì tôi có từ 280-282 và đã cố gắng thêm nó vào trước; trên 282 nhưng điều này đã không làm việc. 280 'property.attribution_id =?', 281 $ superAttribution-> getAttributionId () 282);
babywit

nếu bạn không thể chỉnh sửa mã thì hãy thay thế mã này
Jagdish Ram

Có ai đã viết một phần mở rộng áp dụng bản vá này?
TheNắc_Light

Ngoài ra, điều này dường như không hoạt động trong 2.1.9.
TheNắc_Light

Trong 2.1,14 chức năng đã được chuyển đến Magento\ConfigurableProduct\Model\AttributeOptionProvider. Trông đã được giải quyết từ cái nhìn đầu tiên, không chắc chắn về các lỗi có thể mặc dù.
simonthesorcerer

3
  1. Chuyển đến trang sản phẩm có thể định cấu hình -> Chỉnh sửa cấu hình -> Nhấp vào tiếp theo -tiếp theo - tiếp theo và không thay đổi bất cứ điều gì
  2. Sau đó lưu sản phẩm và họ nên theo thứ tự.

Làm mới hay lưu sản phẩm?
Lasantha

Làm thế nào để làm điều đó với hơn 300 sản phẩm?
Mohammed Joraid

Trên thực tế chỉ mở trang chỉnh sửa sản phẩm có thể định cấu hình, và sau đó chỉ lưu trực tiếp sửa chữa thứ tự sắp xếp. Vì vậy 1- Mở sản phẩm 2- Nhấp vào lưu. Nhưng làm thế nào để làm cho công việc này mà không đi đến tất cả các sản phẩm bằng tay và lưu chúng. Tôi đã cố gắng thêm số lượng lớn tất cả sản phẩm vào Trang web với hy vọng nó sẽ kích hoạt sự kiện lưu nhưng loại này không được sửa. sử dụng MAG2.2.2
Mohammed Joraid

1

Nếu bạn có nghĩa là Newborn là giá trị thuộc tính, bạn cần truy cập Cửa hàng -> Thuộc tính (Sản phẩm) , tìm thuộc tính cần thiết và cũng sử dụng kéo và thả với tùy chọn thay đổi vị trí chuột của bạn. nhập mô tả hình ảnh ở đây

Vị trí của thả xuống (kích thước, màu sắc, hình dạng) có thể được đặt khi tạo các sản phẩm liên quan. Mở biểu mẫu chỉnh sửa -> Cài đặt nâng cao -> Chỉnh sửa cấu hình - Bước giá trị thuộc tính và với sự trợ giúp của các thuộc tính di chuyển kéo và thả nhập mô tả hình ảnh ở đây


Đúng chính xác. "Trong kích thước thuộc tính, tôi đã đặt hàng Newborn 0-3 mo" Vì vậy, bên trong thuộc tính Newborn là ABISE 0-3 mo và trong phần thả xuống của sản phẩm, nó xuất hiện với 0-3 mo ABISE Newborn.
babywit

Theo như tôi có thể nói, thứ tự trong thuộc tính không hoạt động đúng trong magento 2.1.2
babywit

Bất cứ ai cũng có ý tưởng gì gây ra vấn đề này với thứ tự của các thuộc tính không hiển thị theo thứ tự được liệt kê trong thuộc tính hoặc cách giải quyết để có được các thuộc tính hiển thị theo đúng thứ tự? Tôi muốn ra mắt cửa hàng của mình nhưng điều này đang khiến tôi phát điên.
babywit


1

Bởi vì vấn đề này vẫn còn hiện diện trong phiên bản 2.1.7 mới nhất, bạn có thể sử dụng cách giải quyết này:

Chuyển đến trang sản phẩm có thể định cấu hình-> Cấu hình-> xóa tất cả các sản phẩm đơn giản

Sau đó thêm chúng một lần nữa theo thứ tự mong muốn:

Thêm sản phẩm theo cách thủ công-> Lọc sản phẩm theo tên-> Thêm sản phẩm đơn giản theo thứ tự mong muốn.


1

Trong v2.3.x, bạn có thể sắp xếp thứ tự các thuộc tính theo nhãn tùy chọn trong bộ chọn thả xuống sản phẩm có thể định cấu hình bằng cách mở rộng

Magento\ConfigurableProduct\Model\AttributeOptionProvider

và sử dụng

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

Để sắp xếp mảng dữ liệu tùy chọn trả về $ data trong getAttributionOptions ()


bạn có thể xây dựng nó nhiều hơn?
Kowsigan Atsayam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.