私は SCP をうまく使っています。問題はないと思います。基本的に、「カートに追加」イベントを探してそこから移動するオブザーバーがあります。これが私のオブザーバーメソッドです:
public function catalogProductLoadAfter(Varien_Event_Observer $observer)
{
// set the additional options on the product
$action = Mage::app()->getFrontController()->getAction();
if ($action->getFullActionName() == 'checkout_cart_add') {
// assuming you are posting your custom form values in an array called extra_options...
if ($options = $action->getRequest()->getParam('extra_options')) {
$product = $observer->getProduct();
// add to the additional options array
$additionalOptions = array();
if ($additionalOption = $product->getCustomOption('additional_options')) {
$additionalOptions = (array)unserialize($additionalOption->getValue());
}
foreach ($options as $key => $value) {
$additionalOptions[] = array(
'label' => $key,
'value' => $value,
'value' => $value,
);
}
// add the additional options array with the option code additional_options
$observer->getProduct()->addCustomOption('additional_options', serialize($additionalOptions));
}
}
}
すべてがうまく見え、うまく機能します。私はZend_Debug::dump
さまざまな時点でいくつかの声明を発表し、問題があると思われる場所を見つけました。$product
カスタムオプションが含まれていないか、少なくとも表示されません! https://gist.github.com/720a111bc299501726d7ここで重要なのは、表示されている製品オブジェクトが構成可能な製品の子製品であることZend_Debug::dump($product);
です。すべての子製品にはカスタム オプションがあります (この段階に到達するには、それらを設定する必要がありました!)。
カート ページでは、設定したばかりのカスタム オプションが正しく表示されます。では、なぜこの中間点で、上記の要旨がカスタムオプション、特に9行目を表示しないZend_Debug::dump($product);
直前に行うのですか? そのため、は起動せず、スクリプトは失敗します。では、なぜカスタム オプションが Gist に表示されないのに、製品ページに表示され、このスクリプトがカート ページで実行された後に表示されるのでしょうか?foreach
array {}
foreach
これをさらに「証明」するために、結果として foreach() の無効な引数を取得しています。