我有一个特殊情况,用户必须通过帐户注册页面注册帐户(例如/ customer / account / create /)。完成后,如果他们在购物车中有产品,我需要将它们重定向回结帐屏幕。
我目前有一个观察员来监听customer_register_success
事件。观察者通过以下代码将用户帐户升级为成员资格组:
class Hatclub_MembershipHandler_Model_Observer {
// members group id
const GROUP_ID = 4;
// called when a customer registers for the site
public function registrationSuccess(Varien_Event_Observer $observer) {
// extract customer data from event
$customer = $observer->getCustomer();
// a cookie should have been set with the membership id
if (isset($_COOKIE['membership_account_id'])) {
$customer
->setGroupId(self::GROUP_ID)
->setRmsId($_COOKIE['membership_account_id']);
}
return $this;
}
}
我能听到的另一个事件是否更适合我想做的事情?我有一个redirect_to cookie,如果有帮助的话也可以使用。
答案 0 :(得分:1)
经过多次反复试验,我遇到了一个解决方案。由于我已经在使用customer_register_success
事件并使用我的观察者修改用户数据,因此我不得不使用另一个名为customer_save_after
的事件,它就像一个魅力。
config.xml事件块
<customer_save_after>
<observers>
<customer_session_observer>
<class>hatclub_membership_handler/observer</class>
<method>customerSave</method>
<type>singleton</type>
</customer_session_observer>
</observers>
</customer_save_after>
observer.php方法
public function customerSave() {
// set redirect url from cookie, default to null
$redirect_url = (isset($_COOKIE['redirect_url']))
? isset($_COOKIE['redirect_url']) : null;
// if a redirect url was specified
if (isset($redirect_url)) {
// remove cookie to prevent infinite loop
unset($_COOKIE['redirect_url']);
// redirect to provided url
Mage::app()->getResponse()
->setHeader('Location', $redirect_url)
->sendHeaders();
}
}
观察者内部的重定向有点困难,但我设法使用
来完成它Mage::app()->getResponse()
->setHeader('Location', $redirect_url)
->sendHeaders();
建议和批评欢迎。