Magento 2 Wie sortiere ich Mini-Warenkorbartikel?

9

Ich versuche, die Artikel nach der bestellten Produktmenge zu sortieren.

Gibt es eine logische Methode für die Sortierung von Warenkorbartikeln nach bestellter Menge?

Navin Bhudiya
quelle
Hast du eine Lösung dafür gefunden? Ich versuche, Artikel in Minicart nach ihrem Preis zu sortieren.
Korbin
@ k185 haben Sie einen Hinweis aus meiner Antwort unten gefunden
Amrit Pal Singh
@AmritPalSingh Ich habe versucht, die Cart.php zu erweitern, aber ich bekomme immer wieder "PHP Fatal Error" sandbox.onlinephpfunctions.com/code/…
Korbin

Antworten:

5

Sie können das getItems()Plugin verwenden, um Angebotselemente zu sortieren:

Erstellen Sie dieses Plugin

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

In Ihrer Cart.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;
}
Rizwan Khan
quelle
Ich bin nicht sicher, wie ich die Cart.php implementieren soll. Ich habe das Blog nach 'public function getItems ()' hinzugefügt, aber nach dem Kompilieren wird der schwerwiegende MiBPHP-Fehler angezeigt: Die Klasse Magento \ Checkout \ Block \ Cart kann nicht deklariert werden, da der Name bereits vorhanden ist in Verwendung in /var/www/MYSITE/vendor/MYSITE/MYMODULE/Plugin/Checkout/Block/Cart.php in Zeile 272
Korbin
@ k185 Sie können auch für cart.php einen anderen Namen geben. Ich habe gerade ein After-Plugin für die Methode getItems () erstellt.
Rizwan Khan
Oder Sie haben dieser Klasse einen falschen Namespace zugewiesen. Magento\Checkout\Block\Cart, sollte es seinYour\Module\Plugin\Checkout\Block\Cart
Rizwan Khan
1
@ k185 funktioniert das bei dir?
Rizwan Khan
das hat das Problem
behoben
1

Erst ein Plugin erstellen,

In di.xml verwenden Sie:

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

Fügen Sie dann in Cart.php eine Funktion afterGetSectionData hinzu.

Jetzt wird die Logik für das Sortieren gemacht, aber ich kann den Anfang sagen:

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
quelle