2011-01-25 124 views
8

我搜索了一段时间,只有提出了智能解决方案,增加全新的选项集到Magento商店中的产品。添加选项价值产品,然后到Magento购物车

我想要完成的是一种将简单产品添加到购物车的方法。这个简单的产品有一些预先定义的选项(自由文本字段),必须由php函数填充。

那么,我该怎么做呢?假设我有一个ID为“111”的产品和一个自定义选项。

$qty = '1'; 
$product = Mage::getModel('catalog/product')->load("111"); 
// set option value in product model? 

$cart = Mage::helper('checkout/cart')->getCart(); 
$cart->addProduct($product, $qty); 
// set option value while passing product to car? 

$cart->save(); 

在此先感谢您的任何后果。

顺便说一下:通过QueryString设置选项值相对容易,如here

回答

15

您没有在产品型号上设置自定义选项,您将其通过第二个参数传递给$cart->addProduct($product, $params)

的设置我们有一个项目,需要一个外部应用程序添加到Magento的车,是使用$params阵列格式如下:

$params = array(
    'product' => 1, // This would be $product->getId() 
    'qty' => 1, 
    'options' => array(
     34 => "value", 
     35 => "other value", 
     53 => "some other value" 
    ) 
); 

$params['options']包含自定义选项信息。按键是自定义选项ID,如果您使用Firebug或类似工具查看产品屏幕的自定义选项部分,则可以看到它们。

$params['product']可能是多余的,我前一段时间写了一个更早版本的Magento脚本。

此外,我相当确定标准添加到购物车当您添加此方式时,事件将触发,因此您需要自行设置它们。可能有副作用。

+0

谢谢尼克!在Magento 1.4.1.1中测试,效果如预期。 – NiBa 2011-01-26 11:52:58

0

当前答案的问题是,如果SKU相同但选项与第一个不同,则magento不会添加第二个订单项。如果你想要一个3“苹果和一个4”苹果,你希望有单独的订单项。或者至少我是。

一个HTTP调用到以下网址

/store/checkout/cart/add?product=23&qty=1&options[41]=4 

其次

/store/checkout/cart/add?product=23&qty=1&options[41]=3 

将增加两个行项目。

但是这仍然只是战斗的一半,这些选项代码代表什么?那么下面的PHP代码会告诉你。而且由于我们使用的是HTTP调用,所以代码将返回JavaScript准备好的JSON。

<?php  
include_once '../app/Mage.php'; 
Mage::app(); 
echo getProductOptionsIds($_GET['eventcode']); 

function getProductOptionsIds($sku) 
{ 

    $ProductID = Mage::getModel('catalog/product')->getIdBySku($sku); 
    $Product = Mage::getModel('catalog/product')->load($ProductID); 

    $config = array(); 
    $config['ProductID'] = $ProductID; 

    foreach ($Product->getOptions() as $option) { 
      // @var $option Mage_Catalog_Model_Product_Option 
     if ($option->getGroupByType() == Mage_Catalog_Model_Product_Option::OPTION_GROUP_SELECT) { 
      $_tmpValues = array(); 
      foreach ($option->getValues() as $value) { 
       // @var $value Mage_Catalog_Model_Product_Option_Value 
       $_tmpValues[$value->getTitle()] = $value->getId(); 
      } 

      $config[$option->getTitle().'list'] = $option->getId(); 
      $optionValue = $_tmpValues; 
     } else { 
      $optionValue = $option->getId(); 
     } 
     $config[$option->getTitle()] = $optionValue; 
    } 
    return json_encode($config); 
} 
?> 
1

你应该写输入参数addproduct如下面的格式,它是由我自己测试:

$params = array(
    'product' => 1, // This would be $product->getId() 
    'qty' => 1, 
    'super_attribute' => array(
     34 => "value", 
     35 => "other value", 
     53 => "some other value" 
    ) 
); 
4

在Magento的1.7,你必须包装参数数组中瓦瑞恩对象。

   $params = array(
        'product' => $_fancypack->getId(), 
        'qty' => 1, 
        'options' => array(
         $this->_getOptionId($_fancypack,'Product SKU') => $product->getId() .'/'. $product->getSku() 
        ) 
       ); 

       $request = new Varien_Object(); 
       $request->setData($params); 

       $quote->addProduct($_fancypack, $request); 
相关问题