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?


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

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);
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.