Menambahkan beberapa item dengan atribut berbeda ke troli secara terprogram

15

Saya sedang membuat sistem add to cart secara massal. Harap perhatikan: saya ingin ini berfungsi untuk produk sederhana dengan opsi khusus -> Di mana opsi khusus seperti warna (merah, hijau, biru) atau Ukuran (Xl, M, S)

Misalkan seseorang ingin memesan item di bawah ini:

  1. productA, redwarna, qty12
  2. ProductA, greenwarna, qty18
  3. ProductB XL,, qty 3
  4. Product C, jumlah 10

Jadi saya ingin menambahkan 4 item ini dengan kode / secara terprogram. Bagaimana saya bisa melakukan ini? Apakah mungkin melalui string kueri, atau pengontrol atau fungsi bawaan apa pun untuk itu? Itu tidak harus menjadi permintaan tunggal atau satu panggilan fungsi hanya per melihat ...

pengguna1799722
sumber
ya persis bagaimana saya bisa melakukan ini
user1799722
jenis produk apa yang Anda gunakan?
Amit Bera
@AmitBera saya menggunakan produk sederhana
user1799722

Jawaban:

1

Jadi untuk menambahkan produk ke keranjang secara pemrograman cukup sederhana, Anda hanya perlu objek produk dan sesi kereta.

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

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

Ini karena sedikit lebih sulit ketika menambahkan produk yang dapat dikonfigurasi atau dengan opsi tetapi yang perlu Anda lakukan adalah memuat objek produk dengan opsi yang tepat.

Sekarang yang perlu Anda lakukan adalah mengoper array bukan $qtydan array ini harus diformat dengan cara yang berbeda tergantung pada jenis produk apa yang Anda tambahkan.

Lihat yang berikut untuk informasi lebih lanjut:

David Manners
sumber
terima kasih saya hanya ingin menambahkan objek sederhana dengan atribut
tolong
1
@mour agar Anda dapat menambahkan produk melalui url ke troli, tetapi saya rasa itu tidak akan berfungsi dengan banyak produk, jadi saya sarankan untuk membangun pengontrol Anda sendiri seperti pada jawaban saya untuk menambahkan beberapa produk.
David Manners
1

Inilah metode yang saya gunakan beberapa waktu lalu:

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

Cukup lurus ke depan dan diuji sekarang untuk bekerja.

Saya sudah menyertakan 2 produk $productArray, yang sederhana dan yang lainnya dapat dikonfigurasi . Jelas Anda bisa menambahkan lebih banyak dan jika yang dapat dikonfigurasi memiliki 2 opsi seperti ukuran dan warna , Anda bisa menambahkan tambahan dalam array opsi.

Shaughn
sumber
hai terima kasih saya ingin bekerja untuk produk-produk sederhana dengan opsi khusus
user1799722
Jadi komentari baris "tidak disetel ($ params ['opsi']);" kemudian pastikan produk memiliki opsi produk yang ditentukan
Shaughn
1

Selain itu menggunakan produk sederhana dengan opsi khusus adalah imho, bukan cara menggunakan "ukuran" dan "warna" di magento, saya berhasil menambahkan produk dengan opsi khusus ke keranjang seperti ini:

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

Apakah ini yang Anda maksud? Jika Anda ingin menambahkan beberapa produk, ulangi saja proses ini untuk setiap produk yang ingin Anda tambahkan. Faktor kuncinya adalah selalu memiliki product_id, qty dan opsi yang diberikan via $_POST.

simonthesorcerer
sumber
1

Anda dapat menambahkan produk sederhana mulitple dengan opsi khusus dengan menimpa Pengontrol Cart seperti ini:

Saya telah meletakkan file CartController.php di sini: 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());
                    }

                }
            }
        }
vithyalega
sumber