0

顧客登録管理モジュールのコードの変更に苦労しています。インスタントチェックアウトが正常に機能していません。顧客登録管理モジュールが無効になっている場合、インスタントチェックアウトは正常に機能し、送信時にエラーなしで次のステップ/画面に進みます。顧客登録モジュールが有効になっている場合、インスタントチェックアウトの下の送信ボタンをクリックすると、次のステップ/画面に移動せず、代わりに同じ画面に戻り、フォームが空になり、URLに次のようになります:authentication?back = order.php%3Fstep%3D1顧客がインスタントチェックアウトフォームから次の画面に移動するのを妨げているコードを特定することができました。これは、関数hookCreateAccount($ params)のコードです。

    function hookCreateAccount($params)
{
  require_once (dirname(__FILE__).'/ApprovedCustomer.php');
  global $cookie, $back;

  $registration_code = pSQL(Tools::getValue('registration_code'));
  if ($registration_code != '' AND $registration_code == $this->_registrationCode) {
   $customer = $params['newCustomer'];
   $customer->cleanGroups();
   $customer->addGroups ($this->_defaultGroups);

  }

  $cookie->logged = $this->_isCustomerRegistredByDefault;
  $cust = $params['newCustomer'];
  $approval = new ApprovedCustomer($cust->id);
  $approval->is_approved = $this->_isCustomerRegistredByDefault;
  $approval->privilege_request = intval(Tools::getValue('privilege_request'),0);
  $approval->privilege_message = pSQL(Tools::getValue('privilege_message'), '');;
  if (! $approval->save())
   Tools::D('Unable to save approval information');

  if ($this->_sendAdminMail)
   $this->sendMail('pending_registration', array('customer' => $cust, 'approval'=>$approval));
  if (! $approval->is_approved) {
   $back = 'modules/'.basename(__FILE__, '.php').'/messages.php?msg=noconnect&back=my-account.php';
   $cookie->logged = 0;
  $cookie->id_customer = 0;
  }

  elseif ($back == '')
   $back = 'my-account.php';
}

誰かがこのコードの何がこれを引き起こしているのか考えていますか?どんな助けでも本当にありがたいです。

正確に何が起こるか:ユーザーがインスタントチェックアウトフォームに入力して送信をクリックすると、フォームは同じページにリダイレクトされます:... / authentication?back = order.php%3Fstep%3D1しかし、次の場所に移動する必要があります:/ order? step = 2

インスタントチェックアウトフォームのアクション:

<form action="{$link->getPageLink('authentication.php', true)}?back={$back}" method="post" id="new_account_form" class="std">

では、アクション部分を変更する必要がありますか?これはどのように作動しますか?誰かが私を正しい方向に向けることができますか?どんな助けでも本当にありがたいです。

4

1 に答える 1

0

定義上、顧客が1ページのチェックアウト機能の一部として登録していないために競合が発生していると思われます(これがインスタントチェックアウトの意味であると思います)。

コードの最初のブロックを次のようにリファクタリングしてみてください。

global $cookie, $back;

$customer = $params['newCustomer'];
if ($customer->is_guest)
  return;

require_once (dirname(__FILE__).'/ApprovedCustomer.php');


$registration_code = pSQL(Tools::getValue('registration_code'));
if ($registration_code != '' AND $registration_code == $this->_registrationCode) {
  $customer->cleanGroups();
  $customer->addGroups ($this->_defaultGroups);
}
于 2012-05-08T21:11:46.833 に答える