Додавання декількох елементів з різними атрибутами для програмного кошика


15

Я роблю об'ємну добавку до кошикової системи. Зверніть увагу: я хочу, щоб він працював для простих продуктів із спеціальними параметрами -> Там, де користувацькі параметри мають колір (червоний, зелений, синій) або розмір (Xl, M, S)

Припустимо, людина хоче замовити нижче товари:

  1. productA, redколір, qty12
  2. ProductА, greenколір, qty18
  3. ProductB XL,, qty 3
  4. Product C, кількість 10

Тому я хочу додати одразу ці 4 елементи за кодом / програмно. Як я можу це зробити? Чи це можливо за допомогою рядка запиту чи будь-якого контролера чи вбудованої функції для цього? Це не повинно бути одним запитом або лише одним дзвінком функції на побачення ...


так, як саме я можу це зробити
user1799722

який тип товару ви використовуєте?
Аміт Бера

@AmitBera Я використовую прості продукти
user1799722

Відповіді:


1

Тож додавати продукти в кошик програмно досить просто, потрібно просто об'єкт продукту та сеанс кошика.

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

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

Це тому, що трохи складніше при додаванні налаштованих або продуктів з параметрами, але все, що вам потрібно зробити, це завантажити об’єкт продукту правильними параметрами.

Тепер, що вам потрібно зробити, це передати масив замість цього, $qtyі цей масив має бути відформатований по-різному в залежності від типу продукту, який ви додаєте.

Для отримання додаткової інформації див.


дякую, я просто хочу додати прості об’єкти з атрибутами, будь ласка, перечитайте моє запитання
user1799722

1
@mour, щоб ви могли додавати продукти через URL-адресу в кошик, але я не думаю, що це буде працювати з кількома продуктами, тому я пропоную створити свій власний контролер, як у моїй відповіді, щоб додати кілька продуктів.
Девід Маннерс

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, один простий, а інший конфігуруваний . Очевидно, ви можете додати більше, і якщо у налаштованого було два варіанти, такі як розмір і колір , ви можете просто додати додаткові в масив параметрів.


привіт, дякую, я хочу працювати на прості продукти з користувацькими опціями
user1799722

Тому прокоментуйте рядок "unset ($ params ['options']);" то переконайтеся, що в продукті вказані параметри продукту
Шон

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

Це ви мали на увазі? Якщо ви хочете додати кілька продуктів, просто повторіть цей процес для кожного продукту, який ви хочете додати. Ключовим фактором завжди є те, що продукт_id, qty та параметри надаються через $_POST.


1

Ви можете додати багато простих продуктів за допомогою спеціальних параметрів, перезаписавши контролер кошика так:

Я розмістив файл 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());
                    }

                }
            }
        }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.