今回は会員機能周りについてです。
定期的にクライアントから相談を受けるのですが「会員ログイン」のタイミングです。
EC サイト構築用の CMS として EC-CUBE では最初から会員機能が付いています。
これは非常に便利です。
しかしながらクライアントから要望をいただく内容として以下のものがあります。
「ログインしていない時にカート画面から次に進むときの確認画面を省略したい。」
具体的に云うと「カート画面」から「レジに進む」をクリックした際の処理ですね。
会員としてログインしている場合は問題ないのですが未ログインの場合にはログイン画面が表示されます。
ここでログインを忘れている場合は「ログイン」や会員の「新規登録」を行い、ゲスト購入を行う場合は「ゲスト購入」を選択します。
上記の画面に関しては会員がログインを忘れている場合には非常に優しい設定だと思います。
しかし、販売商品によっては基本的に会員登録を重要視されないサイトも存在します。
例えばリピートの必要性が薄い商品を販売しているサイトですね。
こんな時に「このページの間に顧客が逃げてしまう可能性があるので省略したい」と要望を頂きます。
まぁ、主体が会員ではなく非会員であればその通りですよね。
と云うことで試してみましょう。
■カート画面後の会員確認画面を省く方法
●ファイル
<インストールフォルダ>/src/Eccube/Controller/ShoppingController.php
●モジュール
index
●参考行目
100行目ぐらいから
※
既存のカスタマイズ内容は顧慮してません。
該当ファイルは初期の状態からカスタマイズをしています。
●変更内容
if (is_null($Customer)) { log_info('未ログインのためログイン画面にリダイレクト'); return $app->redirect($app->url('shopping_login')); }
↓
if (is_null($Customer)) { //log_info('未ログインのためログイン画面にリダイレクト'); //return $app->redirect($app->url('shopping_login')); log_info('未ログインのためロ非会員情報入力画面にリダイレクト'); return $app->redirect($app->url('shopping_nonmember')); }
●概要説明
該当部分は会員情報の有無でログインの有無を確認しています。
通常はログイン画面にリダイレクトされる形ですね。
今回の変更内容としてはリダイレクトの設定を「shopping_login」から「shopping_nonmember」にする形です。
念のためログの出力内容も書き換えてはいますが気にしない方はそのままでも良いかもしれません(笑)
変更したリダイレクトの先(shopping_nonmember)は「お客様情報の入力」画面になります。
これでログインしていない状態で「レジに進む」をクリックすると「お客様情報入力」の画面が表示される形ですね。
今回変更した「shopping_login」や「shopping_nonmember」の文言は以下のファイルを参照しています。
●ファイル
<インストールフォルダ>/src/Eccube/ControllerProvider/FrontControllerProvider.php
ファイル名が示す通り、フロントエンド(公開画面)のURL設定を管理しています。
今回はその中から以下の部分の文言を取得した感じですね。
$c->match('/shopping/login', '\Eccube\Controller\ShoppingController::login')->bind('shopping_login'); $c->match('/shopping/nonmember', '\Eccube\Controller\ShoppingController::nonmember')->bind('shopping_nonmember');
「$c->match(‘/shopping/login’,」や「$c->match(‘/shopping/nonmember’,」の部分が対象となる URL です。
URL から逆引きして「->bind(‘shopping_nonmember’);」部分の「shopping_nonmember」を探すといった形ですね。
この辺の処理は他の時もよく使いますので覚えておくと便利です。
これで非会員がメインのサイトを構築しても面倒なひと手間を省くことができます。
非会員が主となるサイトにてエンドユーザーの離脱問題をシビアに考えている方は行って損はないのではないでしょうか。
と云うことで今回は終了させて頂きます。