Magento 2: Добавление нескольких настраиваемых вариаций продукта в корзине
-
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']);
.
Использование
$product = $this->_productFactory->create()->setStoreId($storeId)->load($params['product']);
.