Làm thế nào để có được tất cả các mặt hàng trong giỏ hàng hiện nay?


Câu trả lời:


61
$cart = Mage::getModel('checkout/cart')->getQuote();
foreach ($cart->getAllItems() as $item) {
    $productName = $item->getProduct()->getName();
    $productPrice = $item->getProduct()->getPrice();
}

trong $cartbạn có tất cả bộ sưu tập mục giỏ hàng và nếu bạn muốn lấy id sản phẩm, tên bạn có thể nhận được từ việc sử dụng vòng lặp foreach


6
nó hoạt động nhưng nó hiển thị tất cả các sản phẩm bao gồm các sản phẩm thuộc về các sản phẩm có thể cấu hình. Để hiển thị tất cả các sản phẩm ngoại trừ những sản phẩm mà tôi đã đề cập, bạn phải sử dụng getAllVisibleItems ()
Attila Naghi

Làm thế nào để hiển thị số lượng của mặt hàng này?
Marcos Vinicius

Bạn có nên sử dụng getModel? Bạn có nên sử dụng getSingleton không?
Daniel Dev Nz

28

Tôi tìm thấy một giải pháp khác. Các mã sau đây làm việc cho tôi.

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
    $productId = $item->getProductId();     
    // Do something more
}

Làm thế nào để hiển thị số lượng của mặt hàng này?
Marcos Vinicius

1
Tại sao 27 upvote để tải sản phẩm trong một vòng lặp ....?
sv3n

Điều này có hiệu suất khủng khiếp .. bạn đang tải từng sản phẩm trong một vòng lặp khi chúng đã có sẵn thông qua $item->getProduct()... Mỗi khi bạn nghĩ về việc sử dụng -> load () trong magento, bạn có thể tin tưởng vào hiệu suất kém, đôi khi không có bất kỳ sản phẩm nào khác tùy chọn thực sự nhưng đây không phải là trường hợp ở đây ..
OZZIE

1
@ sv3n: Cảm ơn bạn đã chỉ ra. Sửa đổi mã
Sukeshini

20

Có một số phương pháp hoạt động theo một cách khác nhau:

  1. $items = Mage::getSingleton('checkout/cart')->getQuote()->getItemsCollection();

    Trả về một bộ sưu tập mục trích dẫn với tất cả các mục liên quan đến báo giá hiện tại.

  2. $items = Mage::getSingleton('checkout/cart')->getItems();

    Đây là một lối tắt cho phương thức trên, nhưng nếu không có trích dẫn, nó sẽ trả về một mảng trống, vì vậy bạn không thể dựa vào việc lấy một thể hiện của bộ sưu tập.

  3. $items = Mage::getSingleton('checkout/cart')->getQuote()->getAllItems();

    Tải bộ sưu tập mục, sau đó trả về một mảng của tất cả các mục không được đánh dấu là đã xóa (nghĩa là đã bị xóa trong yêu cầu hiện tại)

  4. $items = Mage::getSingleton('checkout/cart')->getQuote()->getAllVisibleItems();

    Tải bộ sưu tập mục, sau đó trả về một mảng của tất cả các mục không được đánh dấu là đã xóakhông có cha mẹ (nghĩa là bạn nhận được các mục cho các sản phẩm được đóng gói và có thể định cấu hình nhưng không phải là con liên quan của chúng). Mỗi mục mảng tương ứng với một hàng được hiển thị trong trang giỏ hàng.

Chọn những gì phù hợp với nhu cầu của bạn tốt nhất. Trong hầu hết các trường hợp, phương thức cuối cùng là những gì bạn cần, nhưng thật không may Magento chỉ cung cấp nó dưới dạng mảng chứ không phải là bộ sưu tập.


Lưu ý rằng Mage::getSingleton('checkout/cart')->getQuote()Mage::getSingleton('checkout/session')->getQuote()có thể hoán đổi cho nhau.


1
$items =Mage::getSingleton('checkout/session')->getQuote()->getAllItems();

foreach($items as $item) {
    echo 'ID: '.$item->getProductId().'<br />';
    echo 'Name: '.$item->getName().'<br />';
    echo 'Sku: '.$item->getSku().'<br />';
    echo 'Quantity: '.$item->getQty().'<br />';
    echo 'Price: '.$item->getPrice().'<br />';
    echo "<br />";
}

cách tốt nhất để có được tất cả các mặt hàng trong giỏ hàng


Sử dụng Mage :: getSingleton ('thanh toán / giỏ hàng') -> getQuote () -> getAllItems ();
Aman Srivastava

Tại sao? Có gì khác biệt?
LM_Fielding

-7

Mã dưới đây được sử dụng để nhận các mặt hàng giỏ hàng

$cart = new Mage_Checkout_Model_Cart();

$cart->init();

foreach ($cart->getItems() as $item) {

   // we can wrap our request in this IF statement

   if (!$item->getParentItemId()) {

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