0

我有一个特殊情况,用户必须通过帐户注册页面(例如/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。

4

1 回答 1

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>

观察者.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();

欢迎提出建议和批评。

于 2013-01-16T05:47:14.373 回答