我正在成功使用 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
不包含任何自定义选项,或者至少看起来不包含!我已经完成了Zend_Debug::dump($product);
,这给了我以下信息:https ://gist.github.com/720a111bc299501726d7这里要看到的重要一点是,显示的产品对象是可配置的子产品。所有子产品都有自定义选项(我只需要设置它们才能进入这个阶段!)。
在购物车页面中,自定义选项正确显示,因为我刚刚设置了它们。那么为什么在这个中间点,当我在上面的要点Zend_Debug::dump($product);
之前foreach
没有显示任何自定义选项,特别是第 9 行。我的观察者没有完成它的工作,因为 $additionalOptions 最终是空白的,只是显示为array {}
. 因此,foreach
不会触发并且脚本会倒下。那么为什么 gist 中没有显示自定义选项,但它们在产品页面上显示并且在此脚本在购物车页面上执行后显示?
为了进一步“证明”这一点,我得到了 foreach() 的无效参数。