Magento 2 Como faço para classificar os itens do mini carrinho?

9

Estou tentando classificar os itens com base no produto solicitado.

Existe algum método lógico para a maneira como os itens do carrinho são classificados por quantidade solicitada?

Navin Bhudiya
fonte
Você encontrou uma solução para isso? Estou tentando classificar itens no minicart com base no preço deles.
27418 Korbin
@ k185 você encontrou qualquer indício de minha resposta abaixo
Amrit Pal Singh
@AmritPalSingh Tentei estender o Cart.php, mas continuo recebendo 'php fatal error' sandbox.onlinephpfunctions.com/code/…
Korbin

Respostas:

5

Você pode usar o getItems()plugin para classificar itens de cotação:

Criar este plugin

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

Em seu carrinho.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
fonte
Não tenho certeza de como implementar o Cart.php, adicionei o blog após 'public function getItems ()', mas após a compilação, ele mostra o erro fatal do MiBPHP: Não é possível declarar a classe Magento \ Checkout \ Block \ Cart, porque o nome já está em uso em /var/www/MYSITE/vendor/MYSITE/MYMODULE/Plugin/Checkout/Block/Cart.php na linha 272
Korbin
@ k185 você pode dar outro nome também para cart.php. Acabei de criar um plug-in after para o método getItems ().
Rizwan Khan
Ou você pode ter atribuído um espaço de nome errado a essa classe. Magento\Checkout\Block\Cart, deveria serYour\Module\Plugin\Checkout\Block\Cart
Rizwan Khan
11
@ k185 isso funciona para você?
Rizwan Khan
que resolveu o problema #
088 Korbin
1

Primeiro crie um plugin,

No di.xml, use:

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

Em Cart.php, adicione uma função afterGetSectionData,

Agora a lógica será feita para a classificação, mas posso dizer o início:

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
fonte