2007年01月13日
ゲスト購入フロー
(お詫び)前回の商品一覧の件
全商品の一覧は、
index.php?main_page=products_all
でアクセスできました。
普通にありました。無いみたいなこと書いてしまって申し訳ありません。
ゲスト購入フロー
で、今回の本題。
Zen Cart でのゲスト購入って、何度かフォーラムなどでも話題になっているのですが、 これといった具体的な情報があまり無いような。
参考
http://www.zen-cart.jp/bbs/viewtopic.php?p=8205
Zen Cart.JP コミュニティ掲示板「登録せずに買い物を進めるには」アカウント作成の画面で会員登録するかしないかを選択
↓
会員登録しない場合は、ゲスト用の一時的なcustomers_idを発行する
↓
そのcustomers_idで一時的にログインした状態にする
↓
顧客情報は、データベースに保存せずセッションで持ちまわる
↓
カートの中身もデータベースに保存せずセッションで持ちまわる
↓
注文完了時に注文データのみをデータベースに保存する通常の登録フローを通しつつ、途中で会員DBに登録しないやり方。
その下にもう一つ。。。
仕様---------------------------------
ログインページの登録フォームを削除して、ボタンを3つ設ける(会員ログイン、新規登録、臨時購入)。
新規登録からの流れは、現状のままの流れを保っています。
臨時購入の方は、その通常の新規登録からで使用するファイル類を丸ごとコピーして、別ファイルとし、 完全に独立させて購入終了まで導くようにしました。
必要な手順---------------------------
1、現状で使用している新規登録から購入終了までに使用しているファイル類をコピーして別名にしておく(これらのファイルをカスタマイズする)2、臨時購入する際の登録フォームからパスワード欄を削除。
3、パスワードは、 includes/modules/pages/create_account_g/header_php.phpのコピーしたファイルの方の中でランダムな数字を割り当て、 同時にE-MailアドレスはE-Mailのデータベースに保存させず、前述のランダムな数字などを使うようにする。 必要なら本来のE-Mailアドレスはファーストネームの部分のテーブルに保存しておく。
$_SESSIONの一つに独自の項目を一つ作る例えば$_SESSION['guest_buy'] = 1;(重要!) 登録完了のメールを送信する部分をコメントアウト!4、臨時購入の際のファイル類ののリダイレクト先を調整する。
5、購入完了時に、請求明細が送られないようにし、ログアウトするようにする。
6、3で作った独自の$_SESSION項目を使って、アカウント情報やレビューへの制限。その他必要に応じ。 ボタンを非表示にするなど対策をする。
通常の購入フローを丸ごとコピーしちゃって、不要な部分(登録完了メール、パスワードの登録)を削除してしまう方法。
どちらにしても大幅なカスタマイズなので、気合入れてかからないといけないです。
具体的なカスタマイズ方法・・・
赤いアクセサリでドレスアップ
|
ケース & バッグ
|
オーディオ & スピーカー
|
ワイヤレス
1.カートの次のページ(index.php?main_page=login) で入力フォームをゲスト購入フォームにする。
※登録して買い物する方向けには、「新規登録はこちら」として登録フォームへ誘導する。
フォームをインクルードしているところのテンプレートを変更する。
tpl_modules_create_account.php →
tpl_modules_guest_account.php
tpl_modules_guest_account.phpでは、パスワード欄、メールタイプの入力を削除(隠蔽)しておく。
あと、<INPUT type=hidden value=true name=guest_f>とかしてゲスト購入を判別できるようにする。
2.登録完了メールの送信をストップ。
includes/modules/create_account.php でフォーム「guest_f」の値を変数に登録し、 セッションにも入れておく。
48行目あたりに
if(isset($_POST['guest_f'])){
$guest_f = zen_db_prepare_input($_POST['guest_f']);
}423行目あたりに
$_SESSION['customer_guest_f'] = $guest_f;
3.500行目あたりに出てくるウェルカムメール(登録完了メール)の送信をとめる。
if($_SESSION['customer_guest_f'] == 'true'){
}else{
zen_mail($name, $email_address, EMAIL_SUBJECT, $email_text,
STORE_NAME, EMAIL_FROM, $html_msg, 'welcome');
}
4.次のページのリダイレクト先を変更。
通常のフローだと「登録完了しました。ありがとう・・・」なんとかっていう登録完了ページに要ってしまうので、 そんなページはスキップしてしまいます。
includes/modules/pages/create_account_success/header.php
20行目あたりに
if($_SESSION['customer_guest_f'] == 'true'){
zen_redirect(zen_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
}
ゲスト購入だったら配送先のフォームへリダイレクトするように指定する。
と、こんな感じで、とりあえず「会員登録を意識させず」に買い物ができるようになりました。
あと、細かいところで言うと、4の後から、ヘッダー部分に「ログアウト|マイページ」なんて文言が出てくるので、
includes/templates/custom/common/tpl_header.php
を改変しておく。
34行目あたりの
<?php if (isset($_SESSION['customer_id'])) { ?>
↓
<?php if (isset($_SESSION['customer_id']) && $_SESSION['customer_guest_f'] != 'true') { ?>
さて、ここで問題が!
ゲスト購入した人が将来、会員登録しようとした時に、すでに登録済みとなってしまい、登録できなくなってしまうので、
どこかで会員削除してあげなければなりません。
ショッピング完了時に削除するのでもいいのかなと思ったけど、会員管理的な操作を顧客フロー内に組み込むのは、 何か嫌な感じなので、管理画面の注文管理でゲスト購入の注文が完了した際に会員を削除するようにしようと思う。
※ゲスト購入注文から、商品の到着までは、会員として情報を保存しておき、注文が商品到着まで完了したら、 会員情報を削除する。注文完了(商品が届く)までは、顧客情報を管理する必要があると思うので、このタイミングにしました。
こんな対応(カスタマイズ)は、どうでしょうか?
もしかしたら、途中説明が抜けているかもしれません。もし、動かないとか、エラーがでたとかあったら、連絡して頂けると助かります。
あと、テンプレートファイルとかは、オーバーライドすることを強くおすすめします。
- by rosso
- at 09:42


comments