Aggiunta di più elementi con attributi diversi al carrello a livello di codice


15

Sto aggiungendo un grosso sistema al carrello. Nota: voglio che funzioni con prodotti semplici con opzioni personalizzate -> Dove le opzioni personalizzate sono come il colore (rosso, verde, blu) o le dimensioni (Xl, M, S)

Supponiamo che una persona desideri ordinare sotto gli articoli:

  1. productA, redcolore, qty12
  2. ProductA, greencolore, qty18
  3. ProductB XL,, qtà 3
  4. Product C, qtà 10

Quindi voglio aggiungere questi 4 elementi per codice / programmaticamente in una volta. Come posso fare questo? È possibile tramite una stringa di query o un controller o una funzione integrata per questo? Non deve essere una singola query o una chiamata di funzione solo per vedere ...


sì, esattamente come posso farlo
user1799722

che tipo di prodotto stai usando?
Amit Bera

@AmitBera sto usando prodotti semplici
user1799722

Risposte:


1

Quindi aggiungere prodotti al carrello a livello di codice è abbastanza semplice, basta solo l'oggetto del prodotto e la sessione del carrello.

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

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

Questo perché un po 'più difficile quando si aggiungono prodotti configurabili o con opzioni, ma tutto ciò che occorre fare è caricare l'oggetto prodotto con le opzioni giuste.

Ora quello che devi fare è passare un array invece di $qtye questo array dovrebbe essere formattato in modo diverso a seconda del tipo di prodotto che stai aggiungendo.

Vedere di seguito per ulteriori informazioni:


grazie voglio solo aggiungere oggetti semplici con attributi per favore
rileggi la

1
@mour in modo da poter aggiungere prodotti tramite url al carrello ma non credo che funzionerà con più prodotti, quindi suggerisco di costruire il proprio controller come nella mia risposta per aggiungere più prodotti.
David Manners,

1

Ecco un metodo che ho usato qualche tempo fa:

// 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());
    }
}

È piuttosto semplice e testato adesso per funzionare.

Ho incluso 2 prodotti $productArray, uno semplice e l'altro configurabile . Ovviamente potresti aggiungerne altri e se il configurabile avesse 2 opzioni come dimensione e colore , potresti semplicemente aggiungere l'aggiunta nell'array delle opzioni.



Quindi commenta la riga "unset ($ params ['options']);" quindi assicurati che il prodotto abbia le opzioni specificate
Shaughn

1

Oltre a usare prodotti semplici con opzioni personalizzate non è praticamente il modo di usare "size" e "color" in magento, sono riuscito ad aggiungere prodotti con opzioni personalizzate al carrello in questo modo:

/*
 * 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);

È questo che intendevi? Se desideri aggiungere più prodotti, ripeti questa procedura per ogni prodotto che desideri aggiungere. Il fattore chiave è sempre avere product_id, qty e le opzioni fornite tramite $_POST.


1

Puoi aggiungere prodotti semplici e multipli con opzioni personalizzate sovrascrivendo il controller del carrello in questo modo:

Ho inserito il file CartController.php qui: 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());
                    }

                }
            }
        }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.