Як отримати всі товари в кошику зараз?


Відповіді:


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

у $cartвас є вся колекція предметів кошика, і якщо ви хочете отримати ідентифікатор товару, назву ви можете отримати, використовуючи цикл foreach


6
вона працює, але відображає всі продукти, включаючи продукти, що належать до продуктів, що настроюються. Для відображення всіх продуктів, окрім тих, про які я згадував, ви повинні використовувати getAllVisibleItems ()
Attila Naghi

Як показати кількість цих предметів?
Маркос Вініцій

Якщо ви використовуєте getModel? Чи не використовуєте ви getSingleton?
Danny Dev Nz

28

Я знайшов інше рішення. Наступний код працює для мене.

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

Як показати кількість цих предметів?
Маркос Вініцій

1
Чому 27 грошей на завантаження продуктів у циклі ....?
sv3n

Це страшна ефективність .. ви завантажуєте кожен продукт у циклі, коли вони вже доступні через $item->getProduct()... Кожен раз, коли ви думаєте про використання -> load () в магенто, ви можете розраховувати на погану ефективність, іноді немає інших Варіант дійсно, але це не так.
OZZIE

1
@ sv3n: Дякуємо, що вказали на це. Змінено код
Сукешині

20

Існує кілька методів, які працюють по-різному:

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

    Повертає колекцію елементів цитат із усіма елементами, пов'язаними з поточною цитатою.

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

    Це ярлик для описаного вище методу, але якщо немає цитати, він повертає порожній масив, тому ви не можете розраховувати на отримання екземпляра колекції.

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

    Завантажує колекцію елементів, потім повертає масив усіх елементів, які не позначені як видалені (тобто були видалені в поточному запиті)

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

    Завантажує колекцію елементів, потім повертає масив усіх елементів, які не позначені як видалені І не мають батьківського (тобто ви отримуєте елементи для пакетних та настроюваних продуктів, але не пов'язаних з ними дітей). Кожен елемент масиву відповідає відображеному рядку на сторінці кошика.

Виберіть те, що найкраще відповідає вашим потребам. У більшості випадків останній метод - це те, що вам потрібно, але, на жаль, Magento надає його лише як масив, а не як збір.


Зверніть увагу , що Mage::getSingleton('checkout/cart')->getQuote()і Mage::getSingleton('checkout/session')->getQuote()є взаємозамінними.


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

найкращий спосіб отримати весь товар у кошику


Використовуйте Mage :: getSingleton ('замовлення / кошик') -> getQuote () -> getAllItems ();
Аман Срівастава

Чому? Яка різниця?
LM_Fielding

-7

Нижче код використовується для отримання предметів кошика

$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()) {

   }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.