Pregunta

Estoy tratando de agregar múltiples variaciones de un producto configurable al carrito a la vez, y he colocado el código juntos, pero actualmente está agregando la cantidad de productos correctos, pero solo usando la primera variación.

En otras palabras, si intento agregar 2 camisetas verdes y 4 camisetas blancas, está agregando 6 camisetas verdes al carrito.

Este es el código que tengo dentro de agregar controlador:

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;
    }

y de esa impresión, está confirmando que las opciones son correctas:

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

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

Pero en el carrito estoy viendo 6 de la primera super_attribute (6 camisetas verdes en lugar de 2 camisetas verdes y 4 blancas).

¿Hay algo que necesito hacer para 'restablecer' el carrito después de agregar cada elemento o algo?

gracias.

¿Fue útil?

Solución

tengo respuesta, El problema es el objeto del producto anular el siguiente bucle, en controlador,

Tenemos que crear cada vez un nuevo objeto de producto y ahora trabaja después de hacerlo a continuación.

en lugar de $product = $this->initProduct($params['product']);we se han establecido debajo de la línea,

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

sus obras.

Otros consejos

Pregunta antigua, solo para reportar una mejor manera de hacer lo mismo.En lugar de usar objetjanager ...

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

usando \ magento \ catálogo \ modelo \ productfactory (SOU deberá agregar que la nueva dependencia a su constructor de clase) producirá el mismo resultado ...

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top