Как получить все товары в корзине в настоящее время?

Ответы:

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?
Дэнни Дев Нз
28

Я нашел другое решение. Следующий код работает для меня.

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
    $productId = $item->getProductId();     
    // Do something more
}
Sukeshini
источник
Как показать количество этих товаров?
Маркос Виниций
1
Почему 27 голосов за загрузку товаров в петле ....?
sv3n
Это имеет ужасную производительность ... вы загружаете каждый продукт в цикле, когда они уже доступны через $item->getProduct()... Каждый раз, когда вы думаете об использовании -> load () в magento, вы можете рассчитывать на плохую производительность, иногда нет других вариант на самом деле, но это не тот случай, здесь ..
OZZIE
1
@ sv3n: Спасибо за указание на это. Модифицированный код
Sukeshini
21

Есть несколько методов, которые работают по-другому:

  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 ('checkout / cart') -> 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()) {

   }
}
Абхишек Гупта
источник