Когда перед нами стоит задача получить все продукты из заказа в magento, то наиболее простым и логичным, на первый взгляд, вариантом является использование метода getAllItems()
. Однако, если в нашем заказе оказались конфигурируемые продукты, то результат оказывается не совсем таким как мы ожидали – на выходе получаем список, состоящий из простых продуктов и их родительских конфигурируемых, т.е вместо одной позиции – две.
Если же нужно получить просто все продукты без удваивания из-за конфигурируемых, то следует воспользоваться методом getAllVisibleItems()
.
Для подтверждения сравните $allItemCount и $allVisibleItemsCount, а так же массивы $allItems и $allVisibleItems в нижеприведенном коде.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// загружаем заказ по id, для получения различий было бы неплохо, // что бы в вашем заказе были и конфигурируемые продукты $order_id = 1; $order = Mage::getModel("sales/order")->load($order_id); $items = $order->getAllItems(); $allItemCount = count($items); $allItems = array(); foreach ($items as $itemId => $item) { $allItems[] = array( 'productId' => $item->getProductId();, 'productName' => $item->getName(), 'productSku' => $item->getSku() ); } $items = $order->getAllVisibleItems(); $allVisibleItemsCount = count($items); $allVisibleItems = array(); foreach ($items as $itemId => $item) { $allVisibleItems[] = array( 'productId' => $item->getProductId();, 'productName' => $item->getName(), 'productSku' => $item->getSku() ); } |
Такми образом, мы убеждаемся, что наиболее приемлемым вариантом является использование метода getAllVisibleItems() для получения продутов из заказа в magento.