Magento 2 Bagaimana cara saya mengurutkan item kereta mini?

9

Saya mencoba untuk mengurutkan item berdasarkan jumlah produk yang dipesan.

Apakah ada metode logis untuk cara item keranjang diurutkan berdasarkan jumlah yang dipesan?

Navin Bhudiya
sumber
apakah Anda menemukan solusi untuk ini? Saya mencoba mengurutkan item dalam minicart berdasarkan harganya.
Korbin
@ k185 Anda telah menemukan petunjuk dari jawaban saya di bawah ini
Amrit Pal Singh
@AmritPalSingh Saya mencoba memperluas Cart.php tapi saya tetap mendapatkan 'php fatal error' sandbox.onlinephpfunctions.com/code/…
Korbin

Jawaban:

5

Anda dapat menggunakan getItems()plugin untuk Mengurutkan Penawaran Item:

Buat Plugin Ini

<type name="Magento\Checkout\Block\Cart">
        <plugin name="item_filter" type="[Your]\[Module]\Plugin\Checkout\Block\Cart" />
</type>

Di Cart.php Anda

public function afterGetItems(\Magento\Checkout\Block\Cart $subject){
     $items = [];
     $totalItems = [];
     $itemAdded = [];

     foreach ($subject->getQuote()->getAllItems() as $item) {
        $totalItems[] = $item->getId();

        if(/*Your Condition*/){
            /*you can sort item by qty wise*/
            /*you can get qty using $item->getQty();*/
           $itemAdded[] = $item;
           $items[] = $item;
        }

     }
     $result = array_diff($totalItems, $itemAdded);

     foreach ($result as $quoteid) {
        if($quoteid){
            $item = $this->cart->getQuote()->getItemById($quoteid);
            $items[] = $item;
        }
     }

    return $items;
}
Rizwan Khan
sumber
Saya tidak yakin bagaimana saya harus menerapkan Cart.php, saya menambahkan blog setelah 'fungsi publik getItems ()' tetapi setelah kompilasi itu menunjukkan kesalahan fatal MiBPHP: Tidak dapat mendeklarasikan kelas Magento \ Checkout \ Block \ Cart, karena namanya sudah sedang digunakan di /var/www/MYSITE/vendor/MYSITE/MYMODULE/Plugin/Checkout/Block/Cart.php di saluran 272
Korbin
@ k185 Anda dapat memberikan nama lain juga untuk cart.php. Saya baru saja membuat plugin after untuk metode getItems ().
Rizwan Khan
Atau Anda mungkin telah memberikan namespace yang salah ke kelas itu. Magento\Checkout\Block\Cart, seharusnyaYour\Module\Plugin\Checkout\Block\Cart
Rizwan Khan
1
@ k185 apakah ini bekerja untuk Anda?
Rizwan Khan
yang memperbaiki masalah ini
Korbin
1

Pertama buat plugin,

Dalam penggunaan di.xml:

<type name="Magento\Checkout\CustomerData\Cart">
     <plugin name="SortByQty" type="Vendor\Module\Plugin\Cart"/>
</type>

Kemudian di Cart.php tambahkan fungsi afterGetSectionData,

Sekarang logika akan dilakukan untuk menyortir tetapi saya dapat mengatakan awalnya:

public function afterGetSectionData(\Magento\Checkout\CustomerData\Cart $subject, $result){


        $items = $result['items'];

        foreach ($items as $key => $value) {
            $_productId = $value['product_id'];
            $_productPrice = $value['product_price_value'];
            $_productQty = $value['qty'];
            $_productTotal = $_productPrice * $_productQty;
        }

         $data = [
            'items' => $items
         ];

        return $result = array_merge($data, $result);
}
Amrit Pal Singh
sumber