我在magento onepage checkout页面中创建了一个自定义字段。当用户填写此字段时,他的客户组应设置为组1 ,如果该字段留空,则其客户组应为组2 。
我的主要问题
1)当用户通过结账页面注册时,如何以编程方式设置客户组值
2)如何在结帐流程中关联我的自定义字段值和客户组值。
提前致谢。
答案 0 :(得分:0)
要获得上述问题的解决方案,您需要使用magento的事件观察者模式,它们是名为customer_save_before的事件,这将帮助您获得所需的答案。
现在,我们必须添加自定义模块。我打电话给我的模块客户,它是Npm小组的一部分。因此,该文件应命名为app / etc / modules / Npm_Customer.xml。将以下代码添加到此文件中:
<config>
<modules>
<Npm_Customer>
<active>true</active>
<codePool>local</codePool>
</Npm_Customer>
</modules>
</config>
接下来,我们需要为模块创建代码。我们的代码背后的想法是我们将在customer_save_before事件上创建一个观察者。 Magento有许多我们可以观察到的事件,但大多数超出了本文的范围。有用的是,在创建客户和客户更改其帐户时都会调用customer_save_before事件。这意味着一个观察者将能够为这两个事件做好工作。
我们为模块编写的所有代码都位于app / code / local / Npm / Customer /目录中。第一个文件是etc / config.xml:
<?xml version="1.0"?>
<config>
<modules>
<Npm_Customer>
<version>1.0</version>
</Npm_Customer>
</modules>
<global>
<events>
<customer_save_before>
<observers>
<npm_customer_save_observer>
<type>singleton</type>
<class>Npm_Customer_Model_Customer_Observer</class>
<method>customerSaveBefore</method>
</npm_customer_save_observer>
</observers>
</customer_save_before>
</events>
</global>
</config>
下一步是创建我们刚刚告诉我们要使用的Magento的类,并且应该在Model / Customer / Observer.php文件中定义:
<?php
class Npm_Customer_Model_Customer_Observer extends Mage_Core_Model_Abstract
{
/*
* observer for the customer saved event
*/
public function customerSaveBefore($observer)
{
try {
$customer = $observer->getCustomer();
if (null != $customer->getPermissionCode()) {
$customer->setData('group_id', 4); // Set the new customer group
} else {
$customer->setData('group_id', 1); // Set to the default customer group
}
} catch ( Exception $e ) {
Mage::log("customer_save_before observer failed: " . $e->getMessage());
}
}
}
如果客户从注册表中提供权限代码,则会自动将其分配给您的新组。
由于