我已经编写了一个Magento模块来激活客户(管理员必须批准/激活所有新客户注册)。
在我的config.xml中,我使用adminhtml_customer_save_after
作为事件的代码来激活我的函数。
如果我真的进入客户记录,进行更改并保存,这样可以正常工作。但是,如果我只是从主要客户>中的操作下拉列表中选择“客户激活”。管理客户页面并提交它不会触发。
在这种情况下,我可以使用不同的事件代码来触发我的功能吗? 我查看了这个很棒的资源[link] http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7,但看不到任何其他可能的嫌疑人。
非常感谢
感谢您寻找Keyur, 这是我的app / code / local / customcron / updateaddress / etc / config.xml
的代码<?xml version="1.0" encoding="UTF-8"?>
<modules>
<CustomCron_UpdateAddress>
<version>0.0.1</version>
</CustomCron_UpdateAddress>
</modules>
<global>
<models>
<customcron_updateaddress>
<class>CustomCron_UpdateAddress_Model</class>
</customcron_updateaddress>
</models>
<events>
<customer_save_before>
<observers>
<customcron_updateaddress>
<class>customcron_updateaddress/observer</class>
<method>addrUpdate</method>
<type>singleton</type>
</customcron_updateaddress>
</observers>
</customer_save_before>
</events>
</global>
这是我的app / code / local / customcron / updateaddress / model / observer.php的代码
class CustomCron_UpdateAddress_Model_Observer
{
public function addrUpdate(Varien_Event_Observer $observer)
{
// Retrieve the Customer being updated from the event observer
if($observer->getCustomer()) {
$customer = $observer->getCustomer();
//$customer = $observer->getEvent()->getCustomer();
// Get the details from customer object
$customer_id = $customer->getId();
$name = $customer->getName();
$email = $customer->getEmail();
Mage::log(
"{$customer_id} {$name} ({$email}) updated",
null,
'customer-updates.log'
);
等。 这继续检查是否已存储地址,如果没有获取详细信息并更新相关表以添加地址。 但是到目前为止,这只会在打开并保存记录时触发(即使在“保存并继续编辑”时也是如此)并且仅在我使用adminhtml_customer_save_after时触发。如果我使用除此之外的任何东西要么根本不开火,要么我得到'$ customer is not object'错误。
非常感谢
答案 0 :(得分:0)
每当您更改客户customerSaveBefore
事件的任何记录时,即使在您从管理客户更改客户属性或您实际进入客户记录的情况下,也始终触发事件,请进行更改并保存。
customerSaveBefore event always execute before any changes on customer