Magento 2 ¿Cómo clasifico los artículos del mini carrito?

9

Estoy tratando de ordenar los artículos según la cantidad pedida del producto.

¿Existe algún método lógico para la forma en que los artículos del carrito se ordenan por cantidad ordenada?

Navin Bhudiya
fuente
¿Encontraste una solución para esto? Estoy tratando de ordenar artículos en minicart en función de su precio.
Korbin
@ k185 has encontrado alguna pista de mi respuesta a continuación
Amrit Pal Singh
@AmritPalSingh Traté de extender el Cart.php pero sigo recibiendo 'php fatal error' sandbox.onlinephpfunctions.com/code/…
Korbin

Respuestas:

5

Puede usar el getItems()complemento para ordenar los elementos de cotización:

Crear este complemento

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

En tu carrito.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
fuente
No estoy seguro de cómo debo implementar el Cart.php, agregué el blog después de 'public function getItems ()' pero después de compilar muestra MiBPHP Error grave: no se puede declarar la clase Magento \ Checkout \ Block \ Cart, porque el nombre ya está en uso en /var/www/MYSITE/vendor/MYSITE/MYMODULE/Plugin/Checkout/Block/Cart.php en la línea 272
Korbin
@ k185 puede dar cualquier otro nombre también para cart.php. Acabo de crear un plugin after para el método getItems ().
Rizwan Khan
O podría haber dado un espacio de nombres incorrecto a esa clase. Magento\Checkout\Block\Cart, debería serYour\Module\Plugin\Checkout\Block\Cart
Rizwan Khan
1
@ k185 ¿esto funciona para usted?
Rizwan Khan
que solucionó el problema
Korbin
1

Primero crea un complemento,

En uso di.xml:

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

Luego, en Cart.php, agregue una función afterGetSectionData,

Ahora se hará la lógica para ordenar, pero puedo decir el comienzo:

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
fuente