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?


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

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);
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.