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>

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

提案と批判を歓迎します。

于 2013-01-16T05:47:14.373 に答える