Magento 2 Làm cách nào để sắp xếp các mục giỏ hàng nhỏ?


9

Tôi đang cố gắng sắp xếp các mặt hàng dựa trên sản phẩm được đặt hàng qty.

Có phương pháp logic nào cho cách sắp xếp các mục trong giỏ hàng theo thứ tự qty không?


bạn đã tìm ra giải pháp cho việc này chưa? Tôi đang cố gắng sắp xếp các mục trong minicart dựa trên giá của chúng.
Korbin

@ k185 bạn có tìm thấy manh mối nào từ câu trả lời của tôi dưới đây không
Amrit Pal Singh

@AmritPalSingh Tôi đã cố gắng mở rộng Cart.php nhưng tôi vẫn nhận được 'lỗi nghiêm trọng php' sandbox.onlinephpfifts.com/code/ Lỗi
Korbin

Câu trả lời:


5

Bạn có thể sử dụng getItems()plugin để sắp xếp các mục được trích dẫn:

Tạo Plugin này

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

Trong Cart.php của bạn

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

Tôi không chắc mình nên triển khai Cart.php như thế nào, tôi đã thêm blog sau 'public function getItems ()' nhưng sau khi biên dịch, nó hiển thị MiBPHP Lỗi nghiêm trọng: Không thể khai báo lớp Magento \ Checkout \ Block \ Cart, vì tên này đã có đang được sử dụng trong /var/www/MYSITE/vendor/MYSITE/MYMODULE/Plugin/Checkout/Block/Cart.php trên dòng 272
Korbin

@ k185 bạn cũng có thể đặt bất kỳ tên nào khác cho cart.php. Tôi vừa tạo một plugin sau cho phương thức getItems ().
Rizwan Khan

Hoặc bạn có thể đã đưa không gian tên sai cho lớp đó. Magento\Checkout\Block\Cart, nó nên làYour\Module\Plugin\Checkout\Block\Cart
Rizwan Khan

1
@ k185 điều này có hiệu quả với bạn không?
Rizwan Khan

đã khắc phục sự cố
Korbin

1

Đầu tiên tạo một plugin,

Trong di.xml sử dụng:

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

Sau đó, trong Cart.php thêm một hàm afterGetSectionData,

Bây giờ logic sẽ được thực hiện để sắp xếp nhưng tôi có thể nói bắt đầu:

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);
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.