Thêm nhiều mục với các thuộc tính khác nhau vào giỏ hàng theo chương trình


15

Tôi đang thực hiện một số lượng lớn thêm vào hệ thống giỏ hàng. Xin lưu ý: tôi muốn nó hoạt động cho các sản phẩm đơn giản với các tùy chọn tùy chỉnh -> Trường hợp tùy chọn tùy chỉnh giống như màu (đỏ, xanh lá cây, xanh dương) hoặc Kích thước (Xl, M, S)

Giả sử một người muốn đặt hàng dưới đây:

  1. productA, redmàu, qty12
  2. ProductA, greenmàu, qty18
  3. ProductB XL,, qty 3
  4. Product C, số 10

Vì vậy, tôi muốn thêm 4 mục này bằng mã / lập trình cùng một lúc. Tôi có thể làm cái này như thế nào? Có thể thông qua chuỗi truy vấn, hoặc bất kỳ bộ điều khiển hoặc chức năng được xây dựng cho điều đó? Nó không phải là một truy vấn duy nhất hoặc một cuộc gọi chức năng chỉ cho mỗi lần xem ...


vâng chính xác làm thế nào tôi có thể làm điều này
user1799722

Bạn đang sử dụng loại sản phẩm nào?
Amit Bera

@AmitBera tôi đang sử dụng các sản phẩm đơn giản
user1799722

Câu trả lời:


1

Vì vậy, để thêm sản phẩm vào giỏ hàng theo chương trình khá đơn giản, bạn chỉ cần đối tượng sản phẩm và phiên giỏ hàng.

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

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

Điều này bởi vì khó khăn hơn một chút khi thêm cấu hình hoặc sản phẩm có tùy chọn nhưng tất cả những gì bạn cần làm là tải đối tượng sản phẩm với các tùy chọn phù hợp.

Bây giờ những gì bạn cần làm là vượt qua một mảng thay vì $qtyvà mảng này sẽ được định dạng theo một cách khác tùy thuộc vào loại sản phẩm bạn đang thêm.

Xem phần sau để biết thêm thông tin:


cảm ơn tôi chỉ muốn thêm các đối tượng đơn giản với các thuộc tính, vui lòng đọc lại câu hỏi của tôi
user1799722

1
@mour để bạn có thể thêm sản phẩm qua url vào giỏ hàng nhưng tôi không nghĩ nó sẽ hoạt động với nhiều sản phẩm nên tôi khuyên bạn nên xây dựng bộ điều khiển của riêng mình như trong câu trả lời của tôi để thêm nhiều sản phẩm.
David Manners

1

Đây là một phương pháp tôi đã sử dụng một thời gian trước:

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

Nó khá thẳng về phía trước và thử nghiệm ngay bây giờ để làm việc.

Tôi đã bao gồm 2 sản phẩm $productArray, một đơn giản và một sản phẩm khác có thể định cấu hình . Rõ ràng bạn có thể thêm nhiều hơn và nếu cấu hình có 2 tùy chọn như kích thướcmàu sắc , bạn chỉ có thể thêm bổ sung trong mảng tùy chọn.


hii cảm ơn tôi muốn làm việc cho các sản phẩm đơn giản với các tùy chọn tùy chỉnh
user1799722

Vì vậy, nhận xét dòng "unset ($ params ['Tùy chọn']);" sau đó đảm bảo sản phẩm có các tùy chọn sản phẩm được chỉ định
Shaughn

1

Bên cạnh đó, việc sử dụng các sản phẩm đơn giản với các tùy chọn tùy chỉnh không phải là cách sử dụng "kích thước" và "màu sắc" trong magento, tôi đã quản lý để thêm các sản phẩm có tùy chọn tùy chỉnh vào giỏ hàng như thế này:

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

Đây có phải là những gì bạn có ý nghĩa? Nếu bạn muốn thêm nhiều sản phẩm, chỉ cần lặp lại quy trình này cho mỗi sản phẩm bạn muốn thêm. Yếu tố chính là luôn luôn có sản phẩm_id, qty và các tùy chọn được cung cấp thông qua $_POST.


1

Bạn có thể thêm các sản phẩm đơn giản với các tùy chọn tùy chỉnh bằng cách ghi đè Bộ điều khiển giỏ hàng như thế này:

Tôi đã đặt tệp CartControll.php tại đây: https://github.com/svlega/Mult Môn- 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());
                    }

                }
            }
        }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.