Question

J'essaie d'ajouter plusieurs variantes d'un produit configurable au panier à la fois et j'ai mis le code ensemble, mais il s'agit actuellement d'ajouter la quantité appropriée de produits, mais n'utilisez que la première variation.

En d'autres termes, si j'essaie d'ajouter 2 t-shirts verts et de 4 t-shirts blancs, il ajoute 6 t-shirts verts dans le panier.

Ceci est le code que j'ai entré dans Ajouter un contrôleur:

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

et de ce print_r, il confirme que les options sont correctes:

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

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

Mais dans le panier, je vois 6 du premier Super_attribute (6 t-shirts verts au lieu de 2 t-shirts verts et 4 blancs).

Y a-t-il quelque chose que je dois faire pour "réinitialiser" le chariot après avoir ajouté chaque article ou quelque chose?

merci.

Était-ce utile?

La solution

J'ai une réponse, Le problème est l'objet de produit remplacer la boucle suivante, dans le contrôleur,

Nous devons créer chaque fois un nouvel objet de produit et maintenant son travail après avoir effectué des modifications ci-dessous.

au lieu de $product = $this->initProduct($params['product']);we a été défini sous la ligne ci-dessous,

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

Ses travaux.

Autres conseils

Une ancienne question, juste pour signaler une meilleure façon de faire la même chose.Au lieu d'utiliser objetManager ...

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

Utilisation \ magento \ catalogue \ Modèle \ ProductFactory (SOU Vous devrez ajouter cette nouvelle dépendance à votre constructeur de classe) produira le même résultat ...

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top