Разница между двумя командами выборки товаров из корзины в Magento - PullRequest
3 голосов
/ 15 июня 2010

В Magento, если вам нужно получить / получить сведения об элементе корзины покупок, вы можете сделать это любым из двух возможных способов, которые предоставят вам все покупаемые элементы в массиве: -

  1. $cartItems1 = $cart->getQuote()->getAllItems();
  2. $cartItems2 = $cart->getItems()->getData();

Но перед использованием любого из двух вышеперечисленных методов необходимо инициализировать объект корзины покупок следующим образом: -

$cart = new Mage_Checkout_Model_Cart();
$cart->init();

Может ли кто-нибудь подробно описать, что предоставляют эти два варианта и их различия между собой, а также их возможное использование.

В любой другой подобный вариант доступен в Magento, кто-нибудь может выделить его?

1 Ответ

10 голосов
/ 04 июля 2010

Если вы посмотрите код классов 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();
...