Domanda

Sto cercando di aggiungere più varianti di un prodotto configurabile al carrello contemporaneamente e ho inserito il codice insieme, ma attualmente aggiunge il giusto Qtà di prodotti, ma solo utilizzando la prima variazione. In altre parole, se provo ad aggiungere 2 T-shirt verdi e 4 T-shirt bianche, aggiunge 6 t-shirt verdi al carrello.

Questo è il codice che ho inserito Aggiungi controller:

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 da quella print_r, confermando che le opzioni siano corrette:

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

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

Ma nel carrello sto vedendo 6 dei primi super_attribute (6 magliette verdi anziché 2 T-shirt verde e 4 bianche).

C'è qualcosa che devo fare per "ripristinare" il carrello dopo aver aggiunto ogni oggetto o qualcosa del genere?

Grazie.

È stato utile?

Soluzione

Ho avuto risposta, il problema è l'oggetto del prodotto override il ciclo successivo, nel controller,

Dobbiamo creare ogni volta un nuovo oggetto prodotto e ora il suo funzionamento dopo aver seguito le modifiche.

invece di $product = $this->initProduct($params['product']);we ha impostato sotto la linea,

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

I suoi lavori.

Altri suggerimenti

Vecchia domanda, solo per segnalare un modo migliore per fare lo stesso.Invece di usare ObjectManager ...

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

Usando \ Magento \ Catalog \ Model \ ProductFactory (SoUD è necessario aggiungere che la nuova dipendenza al costruttore di classe) produrrà lo stesso risultato ...

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top