Ajout de plusieurs articles avec différents attributs au panier par programme


15

Je fais un système d'ajout en vrac au panier. Veuillez noter: je veux que cela fonctionne pour les produits simples avec des options personnalisées -> Où l'option personnalisée est comme la couleur (rouge, vert, bleu) ou la taille (Xl, M, S)

Supposons qu'une personne souhaite commander les articles ci-dessous:

  1. productA, redcouleur, qty12
  2. ProductA, greencouleur, qty18
  3. ProductB XL,, qté 3
  4. Product C, qté 10

Je veux donc ajouter ces 4 éléments par code / par programme à la fois. Comment puis-je faire ceci? Est-il possible via une chaîne de requête, ou tout contrôleur ou fonction intégrée pour cela? Il ne doit pas être une seule requête ou un seul appel de fonction par vue ...


ouais exactement comment puis-je faire cela
user1799722

quel type de produit utilisez-vous?
Amit Bera

@AmitBera J'utilise des produits simples
user1799722

Réponses:


1

Donc, pour ajouter des produits au panier par programme est assez simple, il vous suffit de créer un objet produit et la session du panier.

$quote = Mage::getSingleton('checkout/session')->getQuote();
$quote->addProduct($product, $qty);

$quote->collectTotals()->save();

Cela est un peu plus difficile lors de l'ajout de produits configurables ou avec des options, mais tout ce que vous avez à faire est de charger l'objet produit avec les bonnes options.

Maintenant, ce que vous devez faire est de passer un tableau au lieu de $qtyet ce tableau doit être formaté d'une manière différente selon le type de produit que vous ajoutez.

Consultez les informations suivantes pour plus d'informations:


merci je veux juste ajouter des objets simples avec des attributs pls relire ma question
user1799722

1
@mour afin que vous puissiez ajouter des produits via l'URL au panier, mais je ne pense pas que cela fonctionnera avec plusieurs produits, je suggère donc de créer votre propre contrôleur comme dans ma réponse pour ajouter plusieurs produits.
David Manners

1

Voici une méthode que j'ai utilisée il y a quelque temps:

// Products array
$productArray = array(
    // Simple product
    array(
        'product_id' => 1,
        'qty' => 1
    ),
    // Configurable product
    array(
        'product_id' => 4,
        'qty' => 1,
        'options' => array(
            'color' => 'Red'
        )
    )
);

// Prepare cart products
$cartProducts = array();
foreach ($productArray as $params) {
    if (isset($params['product_id'])) {
        // Load product
        $product = Mage::getModel('catalog/product')->load($params['product_id']);

        if ($product->getId()) {
            // If product is configurable and the param options were specified
            if ($product->getTypeId() == "configurable" && isset($params['options'])) {
                // Get configurable options
                $productAttributeOptions = $product->getTypeInstance(true)
                    ->getConfigurableAttributesAsArray($product);

                foreach ($productAttributeOptions as $productAttribute) {
                    $attributeCode = $productAttribute['attribute_code'];

                    if (isset($params['options'][$attributeCode])) {
                        $optionValue = $params['options'][$attributeCode];

                        foreach ($productAttribute['values'] as $attribute) {
                            if ($optionValue == $attribute['store_label']) {
                                $params['super_attribute'] = array(
                                    $productAttribute['attribute_id'] => $attribute['value_index']
                                );
                            }
                        }
                    }
                }
            }

            unset($params['options']);
            $cartProducts[] = array(
                'product'   => $product,
                'params'    => $params
            );

        }
    }
}

// Add to cart
$cart = Mage::getModel("checkout/cart");
if (!empty($cartProducts)) {
    try{
        foreach ($cartProducts as $cartProduct) {
            $cart->addProduct($cartProduct['product'], $cartProduct['params']);
        }

        Mage::getSingleton('customer/session')->setCartWasUpdated(true);
        $cart->save();
    } catch(Exception $e) {
        Mage::log($e->getMessage());
    }
}

C'est assez simple et testé en ce moment pour fonctionner.

J'ai inclus 2 produits $productArray, l'un simple et l'autre configurable . Évidemment, vous pouvez en ajouter plus et si le configurable avait 2 options comme la taille et la couleur , vous pouvez simplement ajouter les options supplémentaires dans le tableau d'options.


salut merci je veux travailler pour des produits simples avec des options personnalisées
user1799722

Alors commentez la ligne "unset ($ params ['options']);" assurez-vous ensuite que le produit possède les options de produit spécifiées
Shaughn

1

En plus de l'utilisation de produits simples avec des options personnalisées, ce n'est pas la façon d'utiliser la "taille" et la "couleur" dans magento, j'ai réussi à ajouter des produits avec des options personnalisées au panier comme ceci:

/*
 * Assuming this is inside a method in a custom controller
 * that receives a $_POST
 */
$post = $this->getRequest()->getPost();

// load the product first
$product = Mage::getModel('catalog/product')->load($post['product_id']);
$options = $product->getOptions();

// this is the format for the $params-Array
$params = array(
    'product' => $product->getId(),
    'qty' => $post['qty'],
    'related_product' => null,
    'options' => array()
);
// loop through the options we get from $_POST
// and check if they are a product option, then add to $params
foreach( $post as $key => $value ) {
    if(isset($options[$key]) {
        $params['options'][$key] = $value; 
    }
}

// add the product and its options to the cart
$cart->addProduct($product, $params);

Est-ce que c'est ce que vous vouliez dire? Si vous souhaitez ajouter plusieurs produits, répétez simplement ce processus pour chaque produit que vous souhaitez ajouter. Le facteur clé est toujours d'avoir le product_id, qty et les options données via $_POST.


1

Vous pouvez ajouter plusieurs produits simples avec des options personnalisées en remplaçant le contrôleur de chariot comme ceci:

J'ai placé le fichier CartController.php ici: https://github.com/svlega/Multiple-Products-AddtoCart

        //Programatically Adding multiple products to cart
        $productArray = array(
            array(
                'product_id' => 7,
                'qty' => 2,
                'custom_options' => array(
                    'size' => 'XL'
                )
            ),
            array(
                'product_id' => 1,
                'qty' => 1,
                'custom_options' => array(
                    'color' => 'Red'
                )
            )   

        );

        // Prepare cart products
        foreach ($productArray as $params) {
            if (isset($params['product_id'])) {
                // Load product
                $product = Mage::getModel('catalog/product')->load($params['product_id']);

                if ($product->getId()) {
                    // If product is configurable and the param options were specified
                    if (isset($params['custom_options'])) {
                        // Get options                
                        $options = $product->getOptions();
                            foreach ($options as $option) {
                                /* @var $option Mage_Catalog_Model_Product_Option */                        
                                if ($option->getGroupByType() == Mage_Catalog_Model_Product_Option::OPTION_GROUP_SELECT) {                          

                                    $product_options[$option->getTitle()] = $option->getId();
                                    if(array_key_exists($option->getTitle(),$params['custom_options'])){
                                    $option_id =  $option->getId();                 
                                        echo '<br>Did'.$id = $option->getId().'Dlabe'.$option->getTitle();
                                    foreach ($option->getValues() as $value) {                          
                                        /* @var $value Mage_Catalog_Model_Product_Option_Value */                    
                                       if($value->getTitle()== $params['custom_options'][$option->getTitle()]){     
                                echo 'id'.$id = $value->getId().'labe'.$value->getTitle();
                                       $params['options'][$option->getId()]=$value->getId();
                                       }                                
                                    }
                                    }                          
                            }
                            }
                    }

                    try{
                    $cart = Mage::getModel('checkout/cart');
                    $cart->addProduct($product, $params);
                    $cart->save();
                    }catch(Exception $e) {
                    Mage::log($e->getMessage());
                    }

                }
            }
        }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.