我成功使用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
之前的array {}
做这个中点时,上面的要点没有显示任何自定义选项,特别是第9行。我的观察者无法完成它的工作,因为$ additionalOptions最终为空白,只显示为foreach
。因此{{1}}不会触发,脚本会崩溃。那么为什么没有自定义选项显示在要点中,但它们是否在产品页面上显示并且它们在购物车页面上执行此脚本后显示?
为了进一步“证明”这一点,我得到了foreach()的无效参数。