2011-01-25 24 views
8

Magentoストアの商品に完全な新しいオプションセットを追加したちょっとしたウィットのソリューションが出てきました。オプション値を商品に追加してからMagentoでカートに追加

私が達成しようとしているのは、シンプルプロダクトをカートに追加する方法です。このシンプルプロダクトには、php関数で満たさなければならないいくつかの事前定義されたカスタムオプション(フリーテキストフィールド)があります。

どうすればいいですか? ID「111」の商品とカスタムオプションが1つあるとします。

$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(); 

あらかじめありがとうございます。

BTW:QueryStringによるオプション値の設定は、hereのように相対的に簡単です。

答えて

15

製品モデルでカスタムオプションを設定していない場合は、2番目の引数で$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

+0

その構成可能な製品はどのように私はそれを達成することができますか?私はaddtocartからカスタムモジュール関連の値を渡す必要があります。私のオプションは何ですか?私はセッション、イベントを使用することができますが、私は他の方法はないと確信しているときだけ私はやるでしょう。 ps:すべてのタイプの製品に共通するようにすること。 –

+0

ありがとう!私は同じトラブルで戦うために半日を過ごしました! –

0

現在の回答の問題は、SKUが同じだがオプションが最初のものとは異なる場合、magentoは2番目のラインアイテムを追加しないことです。 3 "リンゴと4"リンゴが必要な場合は、個別の広告申込情報が必要です。または少なくとも私はします。

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

に続く、次のURLに

HTTP呼び出し

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

は、2つのラインアイテムを追加します。

これはまだ戦闘の半分ですが、これらのオプションコードは何を表していますか?さて、次のPHPコードはあなたに伝えます。また、HTTPコールを使用しているので、コードはjavascript ready JSONを返します。あなたはそれを自分でテストされ、次の形式としてaddproductのための入力パラメータを記述する必要があり

<?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

:Magentoの1.7では

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

あなたはVarien Object内のparams配列をラップする必要があります。

   $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); 
関連する問題