Magento 2: Добавление нескольких настраиваемых вариаций продукта в корзине

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

  •  29-09-2020
  •  | 
  •  

Вопрос

Я пытаюсь добавить несколько вариантов настраиваемого продукта в корзину одновременно, и я поставил код вместе, но в настоящее время он добавляет правильный qty продуктов, но только с использованием первого варианта.

Другими словами, если я попытаюсь добавить 2 зеленых футболки и 4 белых футболки, он добавляет 6 зеленых футболок в корзину.

Это код, который у меня есть внутрь, добавить контроллер:

public function execute()
    {
        $paramsData = $this->getRequest()->getParams();
        try {
            $msg = array();
            $errorMsg = array();
            foreach($paramsData['qty'] as $pId=>$param){ 

                if (isset($param)) {
                    $filter = new \Zend_Filter_LocalizedToNormalized(
                        ['locale' => $this->_objectManager->get('Magento\Framework\Locale\ResolverInterface')->getLocale()]
                    );
                    $params['qty'] = $filter->filter($param);
                }

                $params['product'] = $paramsData['product'][$pId];
                $product = $this->initProduct($params['product']);   
                $params['super_attribute'] = $paramsData['super'][$pId]; 
                /**
                 * Check product availability
                 */
                if (!$product) {
                    return $this->goBack();
                }            

                $this->cart->addProduct($product, $params);
                $msg[] = $product->getName(); 
            }             

            $this->cart->save();

        }         
        $resultRedirect->setPath('checkout/cart');
        return $resultRedirect;
    }
.

и от этого print_r, он подтверждает, что параметры правильные:

 Array ( [super_attribute] => Array ( [90] => 5 ) [qty] => 2 ) 

 Array ( [super_attribute] => Array ( [90] => 7 ) [qty] => 4 ) 
.

Но в корзине я вижу 6 первых Super_attribute (6 зеленых футболок вместо 2 зеленых и 4 белой футболки).

Есть что-то, что мне нужно сделать, чтобы «сбросить» тележку после добавления каждого элемента или что-то?

спасибо.

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

Решение

У меня есть ответ, Выпуск - это объект продукта, переопределяющий следующий цикл, В контроллере

Мы должны создавать каждый раз новый объект продукта, и теперь его работают после того, как приведены ниже изменения.

вместо $product = $this->initProduct($params['product']);we установил ниже строку,

$storeId = $this->_objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId();
$product = $this->_objectManager->create('Magento\Catalog\Model\Product')->setStoreId($storeId)->load($params['product']);
.

его работает.

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

Старый вопрос, просто чтобы сообщить лучшее способом сделать то же самое.Вместо использования objectmanager ...

$product = $this->_objectManager->create('Magento\Catalog\Model\Product')->setStoreId($storeId)->load($params['product']);
.

Использование \ Magento \ Catalog \ Model \ ProductFactory (SOU, вам нужно добавить, что новая зависимость от конструктора класса) будет производить тот же результат ...

$product = $this->_productFactory->create()->setStoreId($storeId)->load($params['product']);
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top