Magento 在客户注册成功事件后从观察者更新客户数据
从观察者设置客户组id时出现问题。该活动通过customer\u register\u success event(客户注册成功事件)获取新用户创建。事件被传递给我的观察者,例如Magento 在客户注册成功事件后从观察者更新客户数据,magento,Magento,从观察者设置客户组id时出现问题。该活动通过customer\u register\u success event(客户注册成功事件)获取新用户创建。事件被传递给我的观察者,例如 public function registrationSuccess(Varien_Event_Observer $observer) { // extract customer data from event $customer = $observer->getCus
public function registrationSuccess(Varien_Event_Observer $observer) {
// extract customer data from event
$customer = $observer->getCustomer()->getData();
Mage::log('COOKIES', json_encode($_COOKIE));
// a cookie should have been set with the membership id
if (isset($_COOKIE['membership_account_id'])) {
Mage::log('COOKIE SET, ASSOCIATING MEMBERSHIP');
// associate new account with membership, and upgrade user to membership status
$this->associateMembership($customer['entity_id'], $_COOKIE['membership_account_id']);
}
}
然后调用associateMembership方法来更新组id,并设置名为rms_id的自定义客户属性:
public function associateMembership($customer_id, $account_id) {
// load customer model
$customer = Mage::getModel('customer/customer')->load($customer_id);
Mage::log('CUSTOMER DATA: ' . json_encode($customer->toArray()));
// upgrade customer to membership level, and set custom rms_id attribute
$customer
->setWebsiteId(Mage::app()->getWebsite()->getId())
->setGroupId(4)
->setRmsId($account_id);
// save
try {
$customer->save();
Mage::log('ACCOUNT ASSOCIATED: CUSTOMER ID = ' . $customer_id . ' ACCOUNT ID = ' . $account_id);
} catch (Exception $ex) {
Mage::log($ex);
}
}
出于某种原因,返回时没有错误。我得到了正确的用户id,一切似乎都正常。但是,未设置组,也未设置我的自定义id
我是否应该使用另一个允许保存的事件?尝试在加载之前设置客户网站id。 e、 g
也试着把它放死;$customer->save()之后;测试时-在这种情况下,您将确保在您(可能是其他观察者)之后,没有任何其他内容会更改客户数据。在加载客户之前,请尝试加载网站id
$customer = Mage::getModel('customer/customer')
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->load($customer_id);
customer\u register\u success
在您将客户数据保存到自定义observer中后,将重新保存该数据
同时customer\u register\u success
传递客户数据,因此您不需要重新加载它
请参阅/app/code/core/Mage/Customer/controllers/AccountController.php
Mage::dispatchEvent('customer_register_success',
array('account_controller' => $this, 'customer' => $customer)
);
试一试
这最后一部分奏效了。我想,使用随事件一起传递的customer对象是实现这一点的关键——但这并不是积极的原因。当您返回“$this”时,您是否只是告诉Magento使用修改后的客户对象?(例如,使用更新的RMS id和组)
Mage::dispatchEvent('customer_register_success',
array('account_controller' => $this, 'customer' => $customer)
);
public function registrationSuccess(Varien_Event_Observer $observer) {
// extract customer data from event
$customer = $observer->getCustomer();
Mage::log('COOKIES', json_encode($_COOKIE));
// a cookie should have been set with the membership id
if ($membership_account_id = Mage::getModel('core/cookie')->get('membership_account_id')) {
Mage::log('COOKIE SET, ASSOCIATING MEMBERSHIP');
$customer->setGroupId(4)
->setRmsId($membership_account_id);
}
return $this;
}