Magento 2 Comment trier les articles du mini-chariot?

9

J'essaie de trier les articles en fonction de la quantité de produits commandés.

Existe-t-il une méthode logique pour trier les articles du panier par quantité commandée?

Navin Bhudiya
la source
Avez-vous trouvé une solution pour cela? J'essaie de trier les articles en minicart en fonction de leur prix.
Korbin
@ k185 avez-vous trouvé un indice de ma réponse ci
Amrit Pal Singh
@AmritPalSingh J'ai essayé d'étendre Cart.php mais je reçois toujours une "erreur php fatale" sandbox.onlinephpfunctions.com/code/…
Korbin

Réponses:

5

Vous pouvez utiliser un getItems()plugin pour trier les éléments de devis:

Créer ce plugin

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

Dans votre panier.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
la source
Je ne sais pas comment je dois implémenter Cart.php, j'ai ajouté le blog après «fonction publique getItems ()» mais après la compilation, il montre l'erreur fatale MiBPHP: Impossible de déclarer la classe Magento \ Checkout \ Block \ Cart, car le nom est déjà en cours d'utilisation dans /var/www/MYSITE/vendor/MYSITE/MYMODULE/Plugin/Checkout/Block/Cart.php sur la ligne 272
Korbin
@ k185, vous pouvez également donner un autre nom à cart.php. Je viens de créer un plugin after pour la méthode getItems ().
Rizwan Khan
Ou vous avez peut-être donné un mauvais espace de noms à cette classe. Magento\Checkout\Block\Cart, ça devrait êtreYour\Module\Plugin\Checkout\Block\Cart
Rizwan Khan
1
@ k185 cela fonctionne-t-il pour vous?
Rizwan Khan
qui a résolu le problème
Korbin
1

Créez d'abord un plugin,

En di.xml, utilisez:

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

Ensuite, dans Cart.php, ajoutez une fonction afterGetSectionData,

Maintenant, la logique sera faite pour le tri mais je peux dire le début:

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
la source