1

オブザーバーからの顧客グループIDの設定に問題があります。このイベントは、customer_register_successイベントを介した新しいユーザーの作成をピックアップしています。イベントは私のオブザーバーに渡されます、例えば

    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も設定されていません。

保存を実行できる別のイベントを使用する必要がありますか?

4

2 に答える 2

2

顧客をロードする前に Web サイト ID をロードしてみてください

$customer = Mage::getModel('customer/customer')
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->load($customer_id);

customer_register_successカスタムオブザーバーに保存した後、顧客データを再保存します

顧客データもcustomer_register_success渡すので、リロードする必要はありません。

/app/code/core/Mage/Customer/controllers/AccountController.php を参照してください

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;
}
于 2013-01-13T23:59:45.127 に答える
0

ロードする前に、顧客のWebサイトIDを設定してみてください。例えば

$customer = Mage::getModel('customer/customer')
    ->setWebsiteId(Mage::app()->getWebsite()->getId())
    ->load($customer_id);

また、死ぬようにしてください。$ customer-> save();の後 テスト中-そのような場合、あなたはあなたの後に顧客データを変更するものが他にないことを確認します(他のオブザーバーかもしれません)。

于 2013-01-13T23:54:20.010 に答える