Magento 2ミニカートアイテムを並べ替える方法を教えてください。


9

注文した商品に基づいて商品を並べ替えようとしています。

カートの商品を注文数量で並べ替える方法に論理的な方法はありますか?


これの解決策を見つけましたか?価格に基づいてアイテムをミニカートで分類しようとしています。
コービン2018

@ k185以下の私の答えから手がかりを見つけましたか
Amrit Pal Singh

@AmritPalSingh私はCart.phpを拡張しようとしましたが、私は取得のPHPの致命的なエラー'保つsandbox.onlinephpfunctions.com/code/...を
Korbin

回答:


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プラグインを作成しました。
リズワンカーン2018

または、そのクラスに誤った名前空間を指定した可能性があります。Magento\Checkout\Block\Cart、それはする必要がありますYour\Module\Plugin\Checkout\Block\Cart
リズワンカーン

1
@ k185これはあなたのために働くのですか?
リズワンカーン2018

それが問題を修正しました
コービン

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);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.