Получите просто простые продукты, заказанные из цитаты при приобретении продуктов

magento.stackexchange https://magento.stackexchange.com/questions/10081

Вопрос

У меня есть наблюдатель, прикрепленный к sales_order_place_before, и от этого события я получаю элементы заказа, используя

   $event = $observer->getEvent();
   $order = $event->getOrder();
   $items = $order->getQuote()->getAllItems();

Когда я регистрирую эти элементы в предании, так что я получаю вдвое больше продуктов. То есть я получаю настраиваемый и простой продукт

foreach($items as $item){
            $product = $item;
            $sku = $product->getSku();
            $name = $product->getName();
}

Если я изменю $ veems, чтобы быть $items = $order->getQuote()->getAllVisibleItems(); Тогда я могу получить только настраиваемые продукты, но я хочу получить только простые продукты.

Мой вопрос: как я могу получить только простые продукты от заказа.

Это было полезно?

Решение

Я думаю, что не существует прямых методов исключения конфигурации, поскольку логика в Magento заключается в том, что настраиваемым является «основной» продукт, в котором цена находится. Связанный простой продукт может иметь неправильную цену, настроенную. В любом случае, если вы хотите получить эти элементы, а не конфигурации, лучше всего использовать getAllItems() Метод, а затем после этого выбивайте конфигурации:

 $event = $observer->getEvent();
 $order = $event->getOrder();
 $items = $order->getQuote()->getAllItems();
 $itemsExcludingConfigurables = array();
 foreach ($items as $item) {
    if ($item->getTypeId() != 'configurable') {
       $itemsExcludingConfigurables[] = $item;
    }
 }

Другие советы

Это не так просто, потому что в одном предмет цитат может быть более одного детей (сгруппированные, предметы комплекта).

Поэтому я предлагаю что -то вроде:

$returnItems = array();
foreach($order->getQuote()->getAllVisibleItems() as $item){
        if($item->getHasChildren()) {
            foreach($item->getChildrenItems() as $child) {
                $returnItems[] = $child;
            }
        } else {
            $returnItems[] = $item;
        }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top