Magento 2 Как сортировать предметы из мини-корзины?

9

Я пытаюсь сортировать товары по количеству продуктов, заказанных.

Есть ли какой-то логический способ сортировки товаров по упорядоченному количеству?

Навин Бхудия
источник
Вы нашли решение для этого? Я пытаюсь сортировать предметы в миникартах по их цене.
Корбин
@ k185 Вы ​​нашли какую-нибудь подсказку из моего ответа ниже
Амрит Пал Сингх
@AmritPalSingh Я пытался расширить Cart.php, но продолжаю получать 'php fatal error' sandbox.onlinephpfunctions.com/code/…
Корбин

Ответы:

5

Вы можете использовать getItems()плагин для сортировки цитаты:

Создать этот плагин

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

В вашей корзине

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;
}
Ризван Хан
источник
Я не уверен, как мне реализовать Cart.php, я добавил блог после 'public function getItems ()', но после компиляции он показывает фатальную ошибку MiBPHP: Невозможно объявить класс Magento \ Checkout \ Block \ Cart, потому что имя уже используется в /var/www/MYSITE/vendor/MYSITE/MYMODULE/Plugin/Checkout/Block/Cart.php в строке 272
Корбин
@ k185 Вы ​​можете дать любое другое имя для cart.php. Я только что создал плагин после для метода getItems ().
Ризван Хан
Или вы могли дать неправильное пространство имен этому классу. Magento\Checkout\Block\Cart, это должно бытьYour\Module\Plugin\Checkout\Block\Cart
Ризван Хан
1
@ k185 это у тебя работает?
Ризван Хан
это
решило
1

Сначала создайте плагин,

В di.xml используйте:

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

Затем в Cart.php добавьте функцию afterGetSectionData,

Теперь логика будет сделана для сортировки, но я могу сказать старт:

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);
}
Амрит Пал Сингх
источник