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.


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

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.

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


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

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.


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 ()


dapatkah Anda menjelaskannya lebih lanjut?
Kowsigan Atsayam
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.