Programlı olarak sepete farklı özelliklere sahip birden fazla öğe ekleme


15

Alışveriş sepetine toplu olarak ekleme yapıyorum. Lütfen dikkat: Özel seçeneklerle basit ürünler için çalışmasını istiyorum -> Özel seçeneğin renk (kırmızı, yeşil, mavi) veya Boyut (Xl, M, S) gibi olması

Bir kişinin aşağıdaki öğeleri sipariş etmek istediğini varsayalım:

  1. productA, redrenkli, qty12
  2. ProductA, greenrenkli, qty18
  3. ProductB,, XLadet 3
  4. Product C, adet 10

Bu yüzden bu 4 öğeyi bir kerede kod / programlı olarak eklemek istiyorum. Bunu nasıl yapabilirim? Sorgu dizesi veya bunun için herhangi bir denetleyici veya yerleşik işlev ile mümkün mü? Tek bir sorgu veya yalnızca bir işlev çağrısı olması gerekmez ...


evet tam olarak nasıl yapabilirim
user1799722

ne tür bir ürün kullanıyorsunuz
Amit Bera

@AmitBera Basit ürünler kullanıyorum
user1799722

Yanıtlar:


1

Programlı olarak sepete ürün eklemek oldukça basittir, sadece ürün nesnesine ve araba oturumuna ihtiyacınız vardır.

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

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

Bunun nedeni, yapılandırılabilir veya seçenekli ürünler eklerken biraz daha zor, ancak tek yapmanız gereken ürün nesnesini doğru seçeneklerle yüklemek.

Şimdi yapmanız gereken şey yerine bir dizi geçmek $qtyve bu dizi eklediğiniz ürün türüne bağlı olarak farklı bir şekilde biçimlendirilmelidir.

Daha fazla bilgi için aşağıdakilere bakın:


teşekkürler ben sadece özellikleri ile basit nesneler eklemek istiyorum pls
sorumu

1
@mour böylece url üzerinden ürün sepetine ekleyebilirsiniz, ancak birden fazla ürünle çalışacağını sanmıyorum, bu yüzden birden fazla ürün eklemek için cevabımda olduğu gibi kendi denetleyicinizi oluşturmanızı öneriyorum.
David Manners

1

Bir süre önce kullandığım bir yöntem Heres:

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

Oldukça düz ileri ve şu anda çalışmak için test edildi.

$productArrayBiri basit ve diğeri yapılandırılabilir olmak üzere 2 ürün ekledim . Açıkçası daha fazlasını ekleyebilirsiniz ve yapılandırılabilir boyut ve renk gibi 2 seçeneğe sahipse, sadece seçenekler dizisine ek ekleyebilirsiniz.


hii teşekkürler ben özel seçenekleri ile basit ürünler için çalışmak istiyorum
user1799722

Bu yüzden "unset ($ params ['options']);" ardından ürünün belirtilen ürün seçeneklerine sahip olduğundan emin olun
Shaughn

1

Özel seçeneklerle basit ürünleri kullanmanın magento'da "boyut" ve "renk" kullanmanın bir yolu olmadığını imkansız hale getirmenin yanı sıra, sepete böyle özel seçeneklere sahip ürünler eklemeyi başardım:

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

Demek istediğin bu mu? Birden fazla ürün eklemek istiyorsanız, eklemek istediğiniz her ürün için bu işlemi tekrarlayın. Anahtar faktör her zaman product_id, qty ve seçeneklerin verilmiş olmasıdır $_POST.


1

Cart Controller ürününün üzerine yazarak özel seçeneklerle birden fazla basit ürün ekleyebilirsiniz:

CartController.php dosyasını buraya yerleştirdim: 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());
                    }

                }
            }
        }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.