Pergunta

Estou tentando adicionar várias variações de um produto configurável para o carrinho de uma vez, e eu coloquei o código, mas, atualmente, é a adição de direito qtd de produtos, mas apenas usando a primeira variação.

Em outras palavras, se eu tentar adicionar 2 Camisetas Verdes e 4 T-Shirts Brancas, É a adição de 6 Camisetas Verdes no carrinho.

Este é o código que eu tenho dentro adicionar 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;
    }

E a partir de que print_r, ele está confirmando que as opções estão corretas:

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

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

Mas no carrinho eu estou vendo 6 da primeira super_attribute(6 Camisetas verdes em vez de 2 em verde e 4 t-shirt branca).

Existe algo que eu preciso fazer para 'reset' carrinho após a adição de cada item ou de algo?

Obrigado.

Foi útil?

Solução

Eu tenho a resposta, problema é objeto de produto de substituição próximo loop, no controlador,

temos que criar cada vez novo objeto de produto e agora o seu trabalho depois de fazer abaixo alterações.

Em vez de $product = $this->initProduct($params['product']);temos um conjunto de seguir a linha,

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

De suas obras.

Outras dicas

Velha questão, apenas para relatar uma maneira melhor para fazer o mesmo.Em vez de usar ObjectManager...

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

Usando \Magento\Catalog\Model\ProductFactory (sou você precisará adicionar o novo dependência para o construtor de classe) irá produzir o mesmo resultado...

$product = $this->_productFactory->create()->setStoreId($storeId)->load($params['product']);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top