我正在创建自定义扩展程序,我想在购买某个商品时添加自定义选项。
例如,当购买产品“名称标签”时,扩展程序将检测到已订购特定产品并为其分配自定义选项“年”。用户没有看到此信息,但在查看订单时会在管理员中添加并显示该属性。
我们有没有特定的听众来完成这项工作?
编辑根据Ben在评论中提出的建议,我正在编辑评论,以反映我对这里的答案所取得的进展:https://stackoverflow.com/a/9496266/268165
我现在有一个在Namespace_addYear下运行的扩展程序,并运行以下代码:
命名空间/ addYear的/ etc / config.xml中:
<?xml version="1.0" encoding="utf-8"?>
<config>
<modules>
<Namespace_addYear>
<version>1.0.0</version>
</Namespace_addYear>
</modules>
<global>
</global>
<frontend>
<events>
<catalog_product_load_after>
<observers>
<Namespace_addYear>
<type>model</type>
<class>addYear/observer</class>
<method>catalogProductLoadAfter</method>
</Namespace_addYear>
</observers>
</catalog_product_load_after>
</events>
</frontend>
</config>
命名空间/ addYear /型号/ Observer.php:
class Namespace_addYear_Model_Observer
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,
);
}
// add the additional options array with the option code additional_options
$observer->getProduct()
->addCustomOption('additional_options', serialize($additionalOptions));
}
}
}
}
Observer.php取自上面链接的答案。到目前为止,当我删除config.xml中的标签时,除了显示404页面之外,我无法让商店做任何其他事情。
有人能立即看到有什么不对吗?