現在、次の方法でカートに追加する際に、特定のオーダーラインにカスタム オプションを追加しようとしています。
public function addToPackageQuote()
{
$cart = Mage::getSingleton("checkout/cart");
$quote = Mage::getSingleton("checkout/session")->getQuote();
$packageId = Mage::getModel('MyTuxedo_OPP/Package')->checkPackageId();
$products = $this->sortArray();
foreach ($products as $productInfo) {
try {
$split = explode(",", $productInfo);
$_product = Mage::getModel('catalog/product')->load($split[0]);
if($_product->isConfigurable()) {
$simpleId = $this->getConfigurableSimple($split[1],$split[3],$split[0]);
} else {
$simpleId = $split[0];
}
$product = Mage::getModel('catalog/product')->load($simpleId);
$options = new Varien_Object(array(
"qty" => 1,
"custom_options" => array(
"package" => $packageId,
"packageName" => Mage::helper('MyTuxedo_OPP')->getPackageName()
)
));
$quote->addProduct($product, $options);
$this->_getSession()->setCartWasUpdated(true);
$quote->save();
} catch (Exception $e) {
echo $e->getMessage();
}
$this->addFreeItems();
}
$cart->save();
unset($_SESSION['products']);
unset($_SESSION['productId']);
$cart->save();
// Let's unset all the package sessions (apart from a few that are needed!).
$this->kill();
}
このメソッドは、一般的なカートへの追加ハンドラーとは完全に分離されており、単純な製品を排他的に追加するために純粋にパッケージ システムで使用されます (構成可能なスーパー属性も分解して、単純な製品も見つけます)。
これらの単純な製品には、Magento バックエンドでカスタム オプションが関連付けられておらず、製品自体にカスタム オプションを追加することも目標ではありません。私がやりたいことは、購入が行われた場合に注文に転送されるオーダーラインにカスタムオプションを添付することです. したがって、カートに追加する方法で追加されたデータは効果的であり、他の場所にはありません!
カートに追加する方法は期待どおりに機能しますが、追加しようとしているカスタム オプションが含まれていないだけです。また、オプション オブジェクトを次のように単純に定義しようとしました。
$options = new Varien_Object(array(
"qty" => 1,
"package" => $packageId,
"packageName" => Mage::helper('MyTuxedo_OPP')->getPackageName()
)
数量を除いた上記の情報は、オーダーライン オブジェクトにまったく含まれておらず、ここからどこに移動すればよいかわかりません。
現時点では際限なくグーグルしているので、助けていただければ幸いです!!
これで製品モデル オブジェクトを 2 回インスタンス化していることは評価していますが、計画は、それを機能させてから最適化することです。:)