В Magento, если вам нужно получить / получить данные о Покупке в корзине, вы можете сделать это одним из двух возможных способов, которые предоставят вам все покупные элементы в массиве: –
$cartItems1 = $cart->getQuote()->getAllItems();
$cartItems2 = $cart->getItems()->getData();
Но прежде чем использовать какой-либо из двух вышеперечисленных методов, вам необходимо инициализировать объект корзины покупок как:
$cart = new Mage_Checkout_Model_Cart(); $cart->init();
Может кто-нибудь, пожалуйста, подробно описать, что оба варианта обеспечивают и их различия между собой, а также их возможное использование.
В любом случае такой вариант доступен в Magento, может ли кто-нибудь его выделить?
Если вы посмотрите на код классов Cart и Quote, все станет ясно.
Вот код для $ cart-> getItems ():
public function getItems() { return $this->getQuote()->getAllVisibleItems(); }
Обычный и простой – он просто вызывает метод объекта Quote. Итак, теперь вопрос: в чем разница между getAllVisibleItems () и getAllItems () ?
Давайте посмотрим на код обоих методов:
public function getAllItems() { $items = array(); foreach ($this->getItemsCollection() as $item) { if (!$item->isDeleted()) { $items[] = $item; } } return $items; } public function getAllVisibleItems() { $items = array(); foreach ($this->getItemsCollection() as $item) { if (!$item->isDeleted() && !$item->getParentItemId()) { $items[] = $item; } } return $items; }
Единственное отличие: getAllVisibleItems () имеет дополнительную проверку для каждого элемента:
!$item->getParentItemId()
который проверяет, имеет ли продукт родительский (другими словами, он проверяет, является ли он простым продуктом). Поэтому в возвращаемом массиве этого метода будут отсутствовать простые продукты, а не getAllItems () .
Существуют ли другие способы извлечения элементов?
Можно было бы непосредственно получить коллекцию продуктов из объекта цитаты:
$productCollection = $cart->getQuote()->getItemsCollection();