创建帐户并将产品放入购物车后,重定向到结帐

时间:2013-01-16 04:44:08

标签: magento

我有一个特殊情况,用户必须通过帐户注册页面注册帐户(例如/ 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,如果有帮助的话也可以使用。

1 个答案:

答案 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();

建议和批评欢迎。