Magento 2如何分类迷你购物车中的物品?


9

我正在尝试根据订购的产品数量对项目进行排序。

购物车商品按订购数量排序的方式是否有逻辑方法?


您是否找到了解决方案?我正在尝试根据价格将小型购物车中的商品分类。
科宾

@ k185您是否从下面的回答中找到任何线索
Amrit Pal Singh,

@AmritPalSingh我尝试扩展Cart.php,但我不断收到“ php致命错误” sandbox.onlinephpfunctions.com/code/…–
Korbin

Answers:


5

您可以使用getItems()插件对报价项目进行排序:

创建此插件

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

在您的Cart.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;
}

我不确定如何实现Cart.php,我在'public function getItems()'之后添加了博客,但编译后显示了MiBPHP致命错误:无法声明类Magento \ Checkout \ Block \ Cart,因为名称已经存在在第272行上的/var/www/MYSITE/vendor/MYSITE/MYMODULE/Plugin/Checkout/Block/Cart.php中使用
Korbin,

@ k185,您也可以为cart.php命名。我刚刚为getItems()方法创建了一个after插件。
黎兹汗

否则,您可能会给该类错误的名称空间。Magento\Checkout\Block\Cart,应该是Your\Module\Plugin\Checkout\Block\Cart
Rizwan Khan

1
@ k185这对您有用吗?
Rizwan Khan

解决此问题的方法
Korbin '18

1

首先创建一个插件,

在di.xml中使用:

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

然后在Cart.php中的GetSectionData之后添加一个函数,

现在,逻辑将完成排序,但我可以告诉您起点:

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);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.