Проблема с добавлением бесплатного товара в корзину в Magento - PullRequest
1 голос
/ 27 июня 2011

Я написал один бесплатный модуль для Magento, который отлично работает в Magento 1.3.x.

Расширяет "Mage_Checkout_CartController", чтобы добавить бесплатный (простой) товар в корзину, когда соблюдается квалификационная логика. Я изменил функцию «indexAction()» в расширенном «CartController.php» и добавил дополнительный код и логику для добавления свободного элемента, который в основном добавляется с помощью

$cart->addProduct($FREPRODUCTID, 1);
$cart->save();
$this->_getSession()->setCartWasUpdated(true);

Это отлично работает в Magento 1.3.x (CE), однако в 1.4 и 1.5 я вижу, что бесплатный товар добавляется в корзину, но общая сумма в корзине не обновляется, чтобы включить товар, добавленный моим кодом, и При оформлении заказа товар не виден. Хотя продукт является бесплатным, для него настроена нулевая цена, я также замечаю, что когда я назначаю продукту цену, то есть 1 доллар, продукт все равно отображается с нулевой ценой в корзине, как будто его просто не распознают. Бесплатный продукт правильно настроен и продается, есть в наличии и т. Д.

Есть ли какие-либо предложения относительно того, почему мой продукт добавляется в корзину, но почему-то неправильно отображается системой в Magento 1.4 / 1.5?

Спасибо

PAJ

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Попробуйте использовать этот код и проверьте его: -

$product = Mage::getModel('catalog/product');
$product->setStoreId(Mage::app()->getStore()->getId());
$product->load($FREPRODUCTID);

$cart = Mage::getSingleton('checkout/cart');
$cart->init();

$cartItems = $cart->getQuote()->getAllItems();
$counter = 1;
$cartData = array();
if (count($cartItems)) {
    foreach ($cartItems as $_eachItem) {
        $cartData[$counter]['qty'] = $_eachItem->getQty();
        $counter++;
    }
}

$freeProductQty = 1;
$cart->addProduct($product, array('qty' => $freeProductQty, 'product' => $FREPRODUCTID));
$cartData[$counter]['qty'] = $freeProductQty;

$cartData = $cart->suggestItemsQty($cartData);
$cart->updateItems($cartData)
     ->save();

$this->_getSession()->setCartWasUpdated(true);

В методе "addProduct()" я специально упомянул требуемый объект товара (который должен быть добавлен в корзину) в качестве первого параметра и массив с количеством этого товара в качестве второго параметра.

Надеюсь, это поможет.

0 голосов
/ 28 июня 2011

Это должно обеспечить правильное обновление корзины:

        session_write_close();
        $this->_redirect('checkout/cart');

Когда я добавляю это к своим расширенным функциям cartcontroller после добавления моего товара и сохранения корзины, тогда корзина правильно отображает мой добавленный товар.

...