Magento 2 - Masalah penyortiran produk pada halaman kategori menggunakan atribut produk

11

Saya membuat atribut produk dan menetapkannya pada set atribut sehingga akan ditampilkan di halaman detail produk admin. Berdasarkan atribut produk ini, saya mengurutkan koleksi produk pada halaman kategori.

Masalahnya adalah, saya mengatur Catalog Input Type for Store Owneruntuk Text field. Saya harus mengatur nilai numerik terhadap setiap produk untuk mengurutkan koleksi produk berdasarkan atribut ini. Ini berfungsi dengan baik dari 1-9 tetapi ketika saya meningkatkan jumlah lebih dari 9 seperti 10, 11 dll menghancurkan sortasi. Mungkin karena jenis bidang bukan tipe angka

Setiap bantuan, pengalaman, dan berbagi pengetahuan akan dihargai.

Muhammad Hasham
sumber

Jawaban:

3

Silakan coba cara berikut menggunakan plugin khusus, jadi silakan tambahkan kode plugin dalam ekstensi kustom Anda seperti di bawah ini

/Vendor/Module/etc/frontend/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Catalog\Block\Product\ProductList\Toolbar">
        <plugin name="vendormodule_catalog_block_product_listproduct_toolbar" type="Vendor\Module\Plugin\Catalog\Block\Product\ProductList\Toolbar"/>
    </type>
</config>

/Vendor/Module/Plugin/Catalog/Block/Product/ProductList/Toolbar.php

<?php

namespace Vendor\Module\Plugin\Catalog\Block\Product\ProductList;

class Toolbar
{
    /**
     * @var \Magento\Framework\Registry
     */
    protected $_coreRegistry;

    public function __construct(\Magento\Framework\Registry $coreRegistry)
    {
        $this->_coreRegistry = $coreRegistry;
    }

    /**
     * @param \Magento\Catalog\Block\Product\ProductList\Toolbar $toolbar
     * @param \Magento\Framework\Data\Collection $collection
     * @return array
     */
    public function beforeSetCollection(
        \Magento\Catalog\Block\Product\ProductList\Toolbar $toolbar,
        $collection
    ){
        $collection->getSelect()->group('e.entity_id')->order('{YOUR CUSTOM ATTRIBUTE CODE} ASC');
        $collection->getSize();

        return [$collection];
    }
}

Silakan coba dan beri tahu saya jika Anda mendapatkan masalah.

Aasim Goriya
sumber
Saya menggunakan hal yang sama untuk menyortir. Ini berfungsi dengan baik ketika saya memasukkan nilai dari 1-9dalam atribut produk kustom saya tetapi ketika saya meningkatkan nilai dari 9 seperti 10, 11. Itu akan menghancurkan penyortiran seperti yang saya katakan dalam pertanyaan saya. Bagaimanapun terima kasih telah menjawab. Atas usaha Anda. +1
Muhammad Hasham
Jadi cobalah dengan mengubah tipe atribut basis data Anda ke int
Aasim Goriya
Selama pembuatan atribut produk dari admin, adakah yang mengatur tipe atribut produk int? Tidak ada yang Catalog Input Type for Store Owner
namanya