Magento - Добавить массив SKU в корзину

Я работаю над добавлением продукта по форме sku для веб-сайта электронной коммерции, который я разрабатываю. Я сделал форму, которая в основном имеет 2 поля: «cod» и «qt».

Я передал это этому сценарию (отредактировано):

<?php
    $sku = $_POST['cod'];
    $qty = $_POST['qt'];
    $product = new Mage_Catalog_Model_Product();
    $cart = Mage::getSingleton('checkout/cart');

    $osids = array();

    foreach ($sku as $lol){
        $lolz = Mage::getModel('catalog/product')->loadByAttribute('sku',$lol)->getId();
        array_push($osids, $lolz);

    }
var_dump($osids);

$params = array(
    'qty' => 2,
);
$cart->addProductsByIds($osids, $params);
$cart->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);


?>

var_dump правильно отображает массив, т.е. несколько артикулов, когда это так, но цикл foreach добавляет только первый артикул в массиве в корзину.

Есть идеи, почему?

Я не хочу добавлять все артикулы в массив.


person pedropeixoto    schedule 18.01.2013    source источник
comment
Я бы посоветовал вам добавить продукт по URL-адресу, это было бы легко, и вам не нужно писать какой-либо код, просто нужно передать артикул и количество по строке запроса, а magento сделает все остальное.   -  person chanz    schedule 18.01.2013
comment
Это было бы хорошо для одного SKU, но не работает для нескольких SKU, не так ли?   -  person pedropeixoto    schedule 18.01.2013


Ответы (1)


Попробуйте следующий код:

<?php
    $sku_list = $_POST['cod'];
    $qty = $_POST['qt'];
    $cart = Mage::getSingleton('checkout/cart');

    foreach ($sku_list as $sku){
        $product = Mage::getModel('catalog/product')->loadByAttribute('sku',$sku);
        $cart->addProduct($product, $qty);
    }
    $cart->save();
    Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
person Allan MacGregor    schedule 18.01.2013
comment
Боюсь, это не сработало. На этот раз в корзину не было добавлено ни одного товара. Как я это вижу, вы инициализировали корзину перед циклом foreach и сохранили ее, когда она закончилась, что имеет смысл, поэтому я не понимаю, почему это не работает. - person pedropeixoto; 18.01.2013
comment
Может быть, попытать счастья с помощью $cart-›addProductsByIds() и передать массив всех идентификаторов продуктов? - person 1000Nettles; 18.01.2013
comment
Отлично, это работает! Теперь мне также нужно передать количество, принимает ли функция addProductsByIds() параметры? Если да, то как? Не могу найти документацию об этом. - person pedropeixoto; 18.01.2013
comment
Я внес изменения в свой исходный код, если вы посмотрите на модель корзины, app\code\core\Mage\Checkout\Model\Cart.php, вы увидите как функции, так и параметры. В случае функции addProduct() она принимает 2 параметра $productInfo и $requestInfo, в вашем случае вам нужно только передать объект продукта ($ product) в качестве информации $ product и количество ($ qty) в качестве информации запроса. . Это должно помочь, дайте мне знать, если это не сработает. - person Allan MacGregor; 18.01.2013
comment
Спасибо за приведенный выше код, он помог мне начать работу над моделью автоматического добавления дополнительных продуктов, которую мне нужно написать. - person Baber; 14.06.2016