PHPを使用してカスタムオプションでカートに商品を追加する


7

いくつかのカスタムオプションを使用して、プログラムで商品をカートに追加しようとしています。アイテムはカートに正しく追加されますが、オプションは追加されません。私のコードは:

require_once '../../app/Mage.php';
umask(0);
/* not Mage::run(); */
Mage::app('default');

Mage::getSingleton("core/session", array("name" => "frontend"));

$product_id = 2364;
$id_opt_value = 6072;
$final_opt_value = 6074;

$product = Mage::getModel('catalog/product')->load($product_id);
$cart = Mage::getModel('checkout/cart');
$cart->init();
$params = array(
    'product' => $product_id,
    'qty'     => 1,
    'options' => array(         
        $id_opt_value => '123456',
        $final_opt_value => 'black gloss finish',
     )
);

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

私は再確認しましたが、オプションの値は正しいです。私はmagento ce-1.9.0.0を使用しています

回答:


1

チェックアウト/カートモデルを使用する代わりに、見積もりを作成すると役立つ場合があります。

$quote = Mage::getModel('sales/quote')
            ->setStoreId(Mage::app()->getStore('default')->getId());

$paramsここに製品を設定します。

強制的Varien_Objectに自分のパラメータを持ちますaddProduct

$quote->addProduct($product, new Varien_Object($params));
$quote->save();

おかげで、私は次のことを試したところです。paste.ofcode.org / vf7uSudXxStYDaMZjHKPxk、それでもオプションなしで製品が追加されますが、何か間違ったことはありますか?
odd_duck 2014年

0

オプション配列の形式が正しくないと思います。配列は次の形式である必要があると思います。

$params = array(
    'product' => $product_id,
    'qty'     => 1,
    'options' => array(
        '123456' => 'black gloss finish',
     )
);

ここで、キーはオプションID、値はオプション値です。

これに代わる方法は、引用と引用アイテムを直接操作addOptionし、引用アイテムに対して関数を使用することです。


0

このようには機能しません。

$params = array(
    'product' => $product_id,
    'qty'     => 1,
    'options' => array(
        '123456' => 'black gloss finish',
     )
);

123456の代わりに、そのカスタムオプションのIDの数値を入力する必要があります。たとえば、IDが「options_2_text」の場合、「123456」の代わりに「2」を渡します。クリアランスを増やすには、cart.htmlページで次のコードを使用します。

foreach($this->getItems() as $product) {
    $options = $product->getProduct()->getTypeInstance(true)->getOrderOptions($product->getProduct());
    if ($options)
    {
        if (isset($options['options']))
        {
            $result = $options['options'];
            echo '<pre>';
                print_r($result);
            echo '</pre>';    
        }
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.