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?


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

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);
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.