Urutan sortir atribut produk yang dapat dikonfigurasi di Dropdown 2.12

9

Urutan dropdown tidak konsisten dengan urutan atribut itu sendiri. Dalam ukuran atribut saya sudah memesan Newborn 0-3 mo

dan dalam dropdown itu muncul sebagai 0-3 Baru Lahir

ukuran Bayi baru lahir ditambahkan beberapa hari setelah ukuran lain dan produk sederhana yang baru lahir diimpor setelah 0-3 bulan. Adakah saran tentang cara mendapatkan urutan drop down untuk mengikuti urutan daftar di dalam atribut? Saya telah membersihkan cache dan mengindeks ulang. Saya membaca bahwa @Khoa TruongDinh memiliki masalah yang sama tetapi tidak melihat solusi untuk masalah ini, jadi saya melakukan reposting.

sayang
sumber
juga, produk atribut dengan ukuran 0-3 sudah ada dan saya menambahkan semua produk atribut dengan ukuran Newborn.
babywit

Jawaban:

14

Saya menghadapi masalah penyortiran opsi atribut yang sama di front-end, Ketika saya memeriksa masalah ini dan menemukan bahwa ketika mengambil opsi atribut, tidak ada filter penyortiran ditambahkan dalam permintaan secara default di Magento 2.1.2, Jadi untuk memperbaiki masalah ini perlu untuk menambahkan kode di bawah ini untuk menambahkan ORDER By pada fungsi getAttributeOptions on line no 282 dalam file: vendor / magento / module-dikonfigurasi-produk / Model / ResourceModel / Produk / Jenis / Configurable.php Sekarang, itu berfungsi dengan baik untuk saya.

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

Jika tidak dapat mengedit kode, silakan ganti fungsi getAttributeOptions ini dengan kode seperti di bawah ini:

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);
}
Jagdish Ram
sumber
terima kasih banyak untuk ini tetapi saya tidak berpengalaman dalam php. Saya tidak yakin di mana harus menambahkan perbaikan Anda. Inilah yang saya miliki dari 280-282 dan mencoba menambahkannya sebelum; pada 282 tapi ini tidak berhasil. 280 'attribute.attribute_id =?', 281 $ superAttribute-> getAttributeId () 282);
babywit
jika Anda tidak dapat mengedit kode maka silakan ganti ini
Jagdish Ram
Adakah yang menulis ekstensi yang menerapkan tambalan ini?
TheNorthern_Light
Juga, ini sepertinya tidak berhasil di 2.1.9.
TheNorthern_Light
Di 2.1.14 fungsi telah dipindahkan ke Magento\ConfigurableProduct\Model\AttributeOptionProvider. Terlihat terpecahkan pada pandangan pertama, tidak yakin tentang kemungkinan bug.
simonthesorcerer
3
  1. Pergi ke halaman produk yang Dapat Dikonfigurasi -> Edit Konfigurasi -> Klik berikutnya-berikutnya - berikutnya dan jangan ubah apa pun
  2. Kemudian simpan produk dan mereka harus dalam urutan.
Sebastian Tomic
sumber
Segarkan atau Simpan produk?
Lasantha
Bagaimana melakukannya dengan 300+ produk?
Mohammed Joraid
Sebenarnya hanya membuka halaman edit produk yang dapat dikonfigurasi, dan kemudian hanya menyimpan secara langsung memperbaiki urutan pengurutan. Jadi 1- Buka produk 2- Klik simpan. Tetapi bagaimana membuat ini bekerja tanpa harus ke semua produk secara manual dan menyimpannya. Saya mencoba menambahkan semua produk ke Situs secara massal dengan harapan akan memicu acara penyelamatan tetapi pengurutannya tidak diperbaiki. menggunakan MAG2.2.2
Mohammed Joraid
1

Jika Anda bermaksud bahwa Bayi Baru Lahir adalah nilai atribut, Anda harus pergi ke Toko -> Atribut (Produk) , menemukan atribut yang diperlukan dan juga menggunakan seret & lepas dengan posisi perubahan opsi mouse Anda. masukkan deskripsi gambar di sini

Posisi drop-down sendiri (ukuran, warna, bentuk) dapat diatur saat menghasilkan produk terkait. Buka formulir edit -> Pengaturan lanjutan -> Edit konfigurasi - Langkah nilai atribut dan dengan bantuan atribut drag & drop move masukkan deskripsi gambar di sini

Lilian Rameriz
sumber
Ya persis. "Dalam ukuran atribut saya memesannya Newborn 0-3 mo" Jadi di dalam atribut itu sendiri Newborn di atas 0-3 mo dan dalam dropdown produk itu muncul dengan 0-3 mo di atas Newborn.
babywit
Sejauh yang saya tahu, pemesanan di dalam atribut itu sendiri tidak berfungsi dengan baik di
magento
Adakah yang tahu apa yang menyebabkan masalah ini dengan urutan atribut yang tidak muncul dalam urutan yang tercantum dalam atribut atau solusi untuk mendapatkan atribut muncul dalam urutan yang benar? Saya ingin meluncurkan toko saya tetapi ini membuat saya batty.
babywit
1

Ini adalah masalah yang diketahui saat ini di Magento 2. Masih merupakan masalah pada versi 2.1.4.

Inilah masalah GitHub: https://github.com/magento/magento2/issues/7441

bodoh
sumber
Pertanyaan itu diajukan 3 bulan lalu. Magento 2.1.4 dirilis kemarin ...
7ochem
1

Karena masalah ini masih ada juga dalam rilis terbaru 2.1.7 Anda dapat menggunakan solusi ini:

Pergi ke halaman produk yang dapat dikonfigurasi-> Konfigurasi-> hapus semua produk sederhana

Setelah itu tambahkan lagi dalam urutan yang diinginkan:

Tambahkan produk secara manual-> Saring produk dengan nama-> Tambahkan produk sederhana dalam urutan yang diinginkan.

Alain Banutz
sumber
1

Di v2.3.x Anda bisa mengurutkan urutan atribut dengan label opsi di pemilih drop-down produk yang dapat dikonfigurasi dengan memperluas

Magento\ConfigurableProduct\Model\AttributeOptionProvider

dan menggunakan

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

Untuk mengurutkan array data opsi yang dikembalikan $ data dalam getAttributeOptions ()

paj
sumber
dapatkah Anda menjelaskannya lebih lanjut?
Kowsigan Atsayam