2015-06-09 2 views
0

Я пытаюсь добавить настраиваемый продукт в корзину, но пока он не выбрасывает никаких Исключений, тележка по-прежнему пуста.Magento добавляет настраиваемый продукт в корзину программно

Я использовал этот код раньше, без проблем, поэтому я не уверен, что это связано с версией Magento, которую я использую.

код я использую:

$post = $this->getRequest()->getPost(); 
    $session = Mage::getSingleton('customer/session'); 

    $attr = array_keys($post['sa']); 

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

    foreach ($post['sa'][$attr[0]] as $optId){ 
     try { 
      if (abs($post['qty'][$optId]) > 0){ 
       $product = Mage::getModel('catalog/product')->load($post['product']); 
       $this->getRequest()->setParam('product',$post['product']); 
       $this->getRequest()->setParam('super_attribute',array(
         $attr[0] => $optId 
        )); 
       $options = array(
        "product"=>$post['product'], 
        "super_attribute"=>array(
         $attr[0] => $optId 
        ),      
        "qty"=>$post['qty'][$optId] 
       ); 


       $opts = new Varien_Object(); 
       $opts->setData($options); 

       var_dump($opts); 

       $cart->addProduct($product, $opts); 
       $cart->save(); 

      } 
     } catch (Exception $e){ 
      var_dump($e); 
     } 


    } 

    $cart->save(); // save the cart 
    $cart->setCartWasUpdated(true); 

$pdts = $cart->getAllVisibleItems(); 

    var_dump($pdts); 
    die("??"); 

Так что я бы ожидать, чтобы получить тележку с 6 в нем (3 продукты, конфигурируемых + простой), но я получаю нулевой вместо этого - как вы можете видеть из ниже, который также показывает объект $ КЛЮЧ Я пытаюсь передать:

object(Varien_Object)[507] 
     protected '_data' => 
     array (size=3) 
      'product' => string '86' (length=2) 
      'super_attribute' => 
      array (size=1) 
       179 => string '20' (length=2) 
      'qty' => string '1' (length=1) 
     protected '_hasDataChanges' => boolean true 
     protected '_origData' => null 
     protected '_idFieldName' => null 
     protected '_isDeleted' => boolean false 
     protected '_oldFieldsMap' => 
     array (size=0) 
      empty 
     protected '_syncFieldsMap' => 
     array (size=0) 
      empty 
    object(Varien_Object)[663] 
     protected '_data' => 
     array (size=3) 
      'product' => string '86' (length=2) 
      'super_attribute' => 
      array (size=1) 
       179 => string '19' (length=2) 
      'qty' => string '2' (length=1) 
     protected '_hasDataChanges' => boolean true 
     protected '_origData' => null 
     protected '_idFieldName' => null 
     protected '_isDeleted' => boolean false 
     protected '_oldFieldsMap' => 
     array (size=0) 
      empty 
     protected '_syncFieldsMap' => 
     array (size=0) 
      empty 
    object(Varien_Object)[678] 
     protected '_data' => 
     array (size=3) 
      'product' => string '86' (length=2) 
      'super_attribute' => 
      array (size=1) 
       179 => string '17' (length=2) 
      'qty' => string '3' (length=1) 
     protected '_hasDataChanges' => boolean true 
     protected '_origData' => null 
     protected '_idFieldName' => null 
     protected '_isDeleted' => boolean false 
     protected '_oldFieldsMap' => 
     array (size=0) 
      empty 
     protected '_syncFieldsMap' => 
     array (size=0) 
      empty 
    null 
    ?? 

Любая помощь будет apprciated!

ответ

0

Вы можете добавить, используя следующий код.

try { 
$product_id = '126'; 
$product = Mage::getModel('catalog/product')->load($product_id); 
$cart = Mage::getModel('checkout/cart'); 
$cart->init(); 
$params = array(
    'product' => $product_id, 
    'super_attribute' => array(
     525 => 100, 
     //525 is the attribute id of size and 100 is the selected option value (small) of that attribute. 
    ), 
    'qty' => 2, 
); 
$cart->addProduct($product, $params); 
$cart->save(); 
Mage::getSingleton('checkout/session')->setCartWasUpdated(true); 
Mage::getSingleton('core/session')->addSuccess('Product added successfully'); 
//to do 
} 
catch (Exception $e) { 
echo $e->getMessage(); 
} 
+0

Если я ошибаюсь (очень возможно), это будет работать только для добавления продукта с пользовательскими параметрами? Я пытаюсь добавить настраиваемый продукт с super_attributes. –

+0

Хорошо. Ответ обновлен. Вы можете проверить это. –

0

Как бы то ни было, проблема была фактически не связана с добавлением в корзину.

Существует известная проблема с использованием localhost в качестве имени хоста Magento - здесь есть множество других сообщений. Мы работали над этим, но, по-видимому, он все еще не сохранял мою сессию в Chrome, но он отлично работает в Firefox.

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