5

独自のコントローラーを使用して、Magento カートに商品を追加しています。2 つのドロップダウン オプション (色とサイズ) とファイル オプション (デザイン) の 3 つのカスタム オプションがあります。商品をカートに入れるコードは

// obtain the shopping cart
$cart = Mage::getSingleton('checkout/cart');

// load the product
$product = Mage::getModel('catalog/product')
    ->load($productId);

// do some magic to obtain the select ids for color and size ($selectedSize and $selectedColor)
// ...

// define the buy request params
$params = array(
    'product'       => $productId,
    'qty'           => $quantity,
    'options'       => array(
        $customOptionSize->getId()  => $selectedSize,
        $customOptionColor->getId() => $selectedColor,

        // set the file option, but how? 
    ),
);

// add this configuration to cart
$cart->addProduct($product, $paramObject);
$cart->save();

// set the cart as updated
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);

私の質問は、特定のファイルをデザイン オプションに添付するにはどうすればよいですか?

ファイルはすでにサーバー側に転送されています(実際にはリクエストを介して)。ただし、これが必要な場合は、偽のアップロードを行うことができます。しかし、今まで、ファイルのカスタムオプションの設定に関する単一の情報源が見つかりませんでした...

Magento ソースのツアーからの私の推測では、購入リクエストには (オプションではなく、params オブジェクトに) 次のような追加データが必要であるということです。まだ。Magento ソースのこの部分は、かなり単純ではありません。助けてくれてありがとう。

4

1 に答える 1

2

わかりました、最終的にこれを理解しました。params 配列には、キー "options_xx_file_action" を持つカスタム オプションにファイル ('save_new' または 'save_old') の処理方法を伝える特別なエントリが必要です。これは次のようになります。

$params = array(
    'product'       => $productId,
    'qty'           => $quantity,
    'options'       => array(
        $customOptionSize->getId()  => $selectedSize,
        $customOptionColor->getId() => $selectedColor,
    ),
    'options_'.$customOptionDesign->getId().'_file_action'=>'save_new',
);

明らかに、(フォームなどを介して) 投稿リクエストにファイルを追加する必要があります。ファイルの名前は「options_xx_file」にする必要があります。たとえば、私の場合、 $_FILES は次のようになりました。

Array (
[options_108_file] => Array
    (
        [name] => i-like.png
        [type] => application/octet-stream
        [tmp_name] => C:\xampp\tmp\phpAAB8.tmp
        [error] => 0
        [size] => 6369
    )

)
于 2012-12-15T19:05:24.313 に答える