2016-03-29 4 views
0

Я пытаюсь добавить продукты в корзину по отношению к клиенту (программно), но получаю сообщение об ошибке «Недопустимый запрос на добавление продукта в цитату». У меня есть как простые продукты (с настраиваемыми опциями), так и настраиваемые продукты. Ниже мой код. Пожалуйста помоги. Спасибо заранее.Ошибка при добавлении в корзину программно с настраиваемыми опциями

public function addtocartAction(){ 
try { 
    $cusId = $this->getRequest()->getParam('cusId'); 
    $customer = Mage::getModel('customer/customer')->load($cusId); 
    $quote = Mage::getModel('sales/quote')->loadByCustomer($customer); 
    $quoteId = $quote->getId(); 
    //$products = $this->getRequest()->getParam('products'); 
    $products = json_decode('[{"proId": "906","proQty": "1", "options":{"17":"wq","16":"18"}}]'); 

    foreach($products as $product) { 
     /*if (!$product->getId()) { 
      throw new Exception(); 
     }*/ 
     foreach ($product->options as $optKey => $optValue) { 
      $optAll[$optKey] = $optValue; 
     } 

     $mainProduct = Mage::getModel('catalog/product')->load($product->proId); 
     $params = array(
      'product' => $product->proId, 
      'qty'  => $product->proQty, 
      'options' => $optAll 
     ); 
     echo "<pre />"; print_r($params); 
     $quote->addProduct($mainProduct, $params); 
     $quote->setIsActive(1); 
     $quote->collectTotals()->save(); 
    } 
    $rslt['success'] = '1'; 
    $rslt['message'] = 'Product has been succefully added to cart'; 
} 
catch(Exception $e){ 
    $rslt['success'] = '0'; 
    $rslt['message'] = $e->getMessage(); 
} 
print_r(json_encode($rslt)); 

}

ответ

1

Попробуйте использовать телегу вместо цитаты. Это работает для меня:

$cart = Mage::getModel('checkout/cart'); 
$mainProduct = Mage::getModel('catalog/product')->load($product->proId); 
$params = array(
     'product' => $product->proId, 
     'qty'  => $product->proQty, 
     'options' => $optAll 
); 
$cart->init(); 
$cart->addProduct($mainProduct, $params); 
$cart->save(); 
Mage::getSingleton('checkout/session')->setCartWasUpdated(true); 
+0

Спасибо тонну. Этот код работает только для простых продуктов. Как я могу заставить его работать с настраиваемыми продуктами? когда я пытаюсь выполнить настройку своей отображаемой ошибки «Пожалуйста, укажите опцию (ы) продукта». –

+0

Вы должны использовать ** super_attribute ** в параметрах, предоставляя атрибут и их значения. Например: '$ Params = массив ( 'продукта' => $ продукт-> proId, 'super_attribute' => массив ( 132 => 3, 133 => 8 ), 'Количество' => $ product-> proQty, ); 133,132 - атрибуты и 3,8 - значения атрибутов. –

Смежные вопросы