Magento 2 Come posso ordinare gli articoli mini carrello?


9

Sto cercando di ordinare gli articoli in base alla quantità di prodotto ordinata.

Esiste un metodo logico per ordinare gli articoli del carrello in base alla quantità ordinata?


hai trovato una soluzione per questo? Sto cercando di ordinare gli articoli in minicart in base al loro prezzo.
Korbin,

@ k185 hai trovato qualche indizio dalla mia risposta qui sotto
Amrit Pal Singh,

@AmritPalSingh Ho provato a estendere Cart.php ma continuo a ricevere sandbox.onlinephpfunctions.com/code/
Korbin

Risposte:


5

È possibile utilizzare il getItems()plug-in per ordinare le voci di preventivo:

Crea questo plugin

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

Nel tuo carrello.php

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

Non sono sicuro di come dovrei implementare Cart.php, ho aggiunto il blog dopo 'public function getItems ()' ma dopo la compilazione mostra MiBPHP Errore fatale: Impossibile dichiarare la classe Magento \ Checkout \ Block \ Cart, perché il nome è già in uso in /var/www/MYSITE/vendor/MYSITE/MYMODULE/Plugin/Checkout/Block/Cart.php sulla linea 272
Korbin

@ k185 puoi dare qualsiasi altro nome anche per cart.php. Ho appena creato un plug-in after per il metodo getItems ().
Rizwan Khan,

Oppure potresti aver assegnato uno spazio dei nomi errato a quella classe. Magento\Checkout\Block\Cart, dovrebbe essereYour\Module\Plugin\Checkout\Block\Cart
Rizwan Khan,

1
@ k185 funziona per te?
Rizwan Khan,

questo risolto il problema
Korbin

1

Innanzitutto crea un plug-in,

In di.xml utilizzare:

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

Quindi in Cart.php aggiungi una funzione dopo GetSectionData,

Ora la logica verrà eseguita per l'ordinamento, ma posso dire l'inizio:

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);
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.