การเพิ่มหลายรายการที่มีคุณลักษณะที่แตกต่างเพื่อซื้อทางโปรแกรม


15

ฉันกำลังเพิ่มระบบตะกร้าสินค้าจำนวนมาก โปรดทราบ: ฉันต้องการให้มันทำงานกับผลิตภัณฑ์ที่เรียบง่ายพร้อมกับตัวเลือกที่กำหนดเอง -> ตัวเลือกที่กำหนดเองเป็นเหมือนสี (แดง, เขียว, น้ำเงิน) หรือขนาด (Xl, M, S)

สมมติว่าคนที่ต้องการสั่งซื้อรายการด้านล่าง:

  1. productA, redสี, qty12
  2. ProductA, greenสี, qty18
  3. ProductB XL,, จำนวน 3
  4. Product C, จำนวน 10

ดังนั้นฉันต้องการเพิ่ม 4 รายการเหล่านี้ด้วยรหัส / โดยทางโปรแกรมในครั้งเดียว ฉันจะทำสิ่งนี้ได้อย่างไร มันเป็นไปได้ผ่านสตริงการสืบค้นหรือตัวควบคุมใด ๆ หรือฟังก์ชั่นในตัวสำหรับที่? ไม่จำเป็นต้องมีคิวรีเดียวหรือเรียกใช้ฟังก์ชันเดียวต่อการดู ...


ใช่ฉันจะทำสิ่งนี้ได้อย่างไร
user1799722

คุณใช้ผลิตภัณฑ์ประเภทใด
Amit Bera

@AmitBera ฉันใช้ผลิตภัณฑ์ที่เรียบง่าย
user1799722

คำตอบ:


1

ดังนั้นการเพิ่มผลิตภัณฑ์ลงในรถเข็นโดยทางโปรแกรมนั้นค่อนข้างง่ายคุณเพียงแค่ต้องการวัตถุผลิตภัณฑ์และเซสชันรถเข็น

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

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

นี่เป็นเพราะยากขึ้นเล็กน้อยเมื่อเพิ่มการกำหนดค่าหรือผลิตภัณฑ์ที่มีตัวเลือก แต่สิ่งที่คุณต้องทำคือการโหลดวัตถุผลิตภัณฑ์ด้วยตัวเลือกที่เหมาะสม

ตอนนี้สิ่งที่คุณต้องทำคือส่งผ่านอาร์เรย์แทน$qtyและควรจัดรูปแบบอาร์เรย์นี้ด้วยวิธีที่แตกต่างกันขึ้นอยู่กับประเภทของผลิตภัณฑ์ที่คุณกำลังเพิ่ม

ดูต่อไปนี้สำหรับข้อมูลเพิ่มเติม:


ขอบคุณฉันแค่ต้องการเพิ่มวัตถุง่าย ๆ ด้วยคุณสมบัติกรุณาอ่านคำถามของฉันอีกครั้ง
user1799722

1
@mour เพื่อให้คุณสามารถเพิ่มผลิตภัณฑ์ผ่าน url ลงในรถเข็น แต่ฉันไม่คิดว่ามันจะทำงานร่วมกับหลาย ๆ ผลิตภัณฑ์ดังนั้นฉันขอแนะนำให้สร้างตัวควบคุมของคุณเองเช่นเดียวกับคำตอบของฉันในการเพิ่มผลิตภัณฑ์หลายรายการ
David Manners

1

นี่เป็นวิธีที่ฉันใช้ในขณะที่กลับมา:

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

มันตรงไปตรงมาและผ่านการทดสอบในขณะนี้ที่จะทำงาน

ฉันได้รวม 2 ผลิตภัณฑ์ไว้ใน$productArrayหนึ่งผลิตภัณฑ์ที่เรียบง่ายและผลิตภัณฑ์อื่น ๆ ที่กำหนดค่าได้ เห็นได้ชัดว่าคุณสามารถเพิ่มมากขึ้นและถ้าการกำหนดค่ามี 2 ตัวเลือกเช่นขนาดและสีคุณสามารถเพิ่มเพิ่มเติมในอาร์เรย์ตัวเลือก


สวัสดีฉันต้องการทำงานกับผลิตภัณฑ์ที่เรียบง่ายพร้อมด้วยตัวเลือกที่กำหนดเอง
user1799722

ดังนั้นแสดงความคิดเห็นออกบรรทัด "unset ($ params ['options']);" จากนั้นตรวจสอบให้แน่ใจว่าผลิตภัณฑ์มีตัวเลือกผลิตภัณฑ์ที่ระบุ
Shaughn

1

นอกจากการใช้ผลิตภัณฑ์ที่เรียบง่ายพร้อมตัวเลือกที่กำหนดเองแล้วฉันไม่ได้ใช้วิธี "ขนาด" และ "สี" ในวีโอไอพีฉันยังสามารถเพิ่มผลิตภัณฑ์ที่มีตัวเลือกที่กำหนดเองลงในตะกร้าเช่นนี้:

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

นี่คือสิ่งที่คุณหมายถึง? หากคุณต้องการเพิ่มผลิตภัณฑ์หลายรายการเพียงทำซ้ำขั้นตอนนี้สำหรับแต่ละผลิตภัณฑ์ที่คุณต้องการเพิ่ม ปัจจัยสำคัญอยู่เสมอที่จะมี product_id, $_POSTจำนวนและตัวเลือกที่ได้รับผ่านทาง


1

คุณสามารถเพิ่มผลิตภัณฑ์ที่เรียบง่ายแบบ mulitple ด้วยตัวเลือกที่กำหนดเองโดยเขียนทับตัวควบคุมรถเข็นดังนี้:

ฉันได้วางไฟล์ CartController.php ไว้ที่นี่: 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());
                    }

                }
            }
        }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.