目次
やりたいこと
完全会員制のECサイトを作りたい。ゲスト購入(非会員購入)を安全に消し去りたい。
やり方
もちろん、twigテンプレートの編集と一部Controllerの改修が必要である。
default/Shopping/login.twig からゲスト購入への遷移を消し去る
商品をカートに入れた後に未ログイン状態でレジに進むとログインフォームとゲスト購入へ遷移するためのボタンが表示される。このボタンが表示されている領域まるごとを消し去ろう。
テンプレートをapp配下へコピー
src/Eccube/Resource/template/default/Shopping/login.twig を
app/template/default/Shopping/login.twig へコピーしよう。
EC-CUBE4でカスタマイズする場合は、appにファイルをコピーして作ってそこでカスタマイズする方が良い。理由は、EC-CUBE4本体のバージョンアップ実施による先祖返り防止だったりだ。
default/Shopping/login.twig からゲスト購入へ遷移するボタンの領域を消し去る
現時点では大体72行目。まるごと以下のHTMLを消し去ろう。
※すでにこのファイルにカスタマイズを加えている場合は、ゲスト購入などで文字列検索して当たりをつけよう。
{% if is_granted('IS_AUTHENTICATED_REMEMBERED') == false %}
<div class="ec-grid3__cell">
<div class="ec-guest">
<div class="ec-guest__inner">
<p>{{ '会員登録をせずに購入手続きをされたい方は、下記よりお進みください。'|trans }}</p>
<div class="ec-guest__actions"><a class="ec-blockBtn--cancel" href="{{ url('shopping_nonmember') }}">{{ 'ゲスト購入'|trans }}</a>
</div>
</div>
</div>
</div>
{% endif %}
ほら消えた。でも、ゲスト購入への遷移ボタンの領域がポッカリと開いてしまっているので…スタイルを調整しよう。
26行目あたりに、<div class="ec-grid3__cell2">
というのがあるから、<div class="ec-grid3__cell3">
に書き換えてあげよう。
うん。これで良い。
ゲスト購入フローのControllerをカスタマイズ
ゲスト購入への遷移ボタンを無くしたからこれで安心!…ではないですね。
未ログイン状態+商品をカートに入れた状態でブラウザのアドレスバーに /shopping/nonmember と入力してアクセスするとゲスト購入フローにたどり着いてしまいます。
当たり前ですよね、遷移をなくしただけでフロー自体は生きているのですから…。
NonMemberShoppingControllerのルーティングを上書きで消し去る
ゲスト購入フローの処理が書かれたControllerは、
NonMemberShoppingControllerになります。
ファイルの実体としては、
src/Eccube/Controller/NonMemberShoppingController.php に存在します。
コントローラーのカスタマイズをする際もなのですが、srcディレクトリ配下のプログラムは弄りません。EC-CUBE4本体のアップデートが(ry
コントローラーにたいしてカスタマイズは、
app/Customize/Controller/ 配下に○○Controller.php を設置してコントローラーの実装をします。
新しいルーティングを追加したり、既存のルーティングを上書きなどもカスタマイズディレクトリに設置したコントローラーで行なっていきましょう。
カスタマイズディレクトリにコントローラーを設置し改修
app/Customize/Controller/NonMemberShoppingController.php を作成し以下のプログラムをコピペして保存してください。
<?php
namespace Customize\Controller;
use Eccube\Controller\AbstractShoppingController;
use Symfony\Component\Routing\Annotation\Route;
class NonMemberShoppingController extends AbstractShoppingController
{
/**
* 非会員処理
*
* @Route("/shopping/nonmember", name="shopping_nonmember")
* @Route("/shopping/nonmember/shipping/{id}", name="shopping_nonmember_shipping", requirements={"id" = "\d+"})
*/
public function index()
{
return $this->redirectToRoute('homepage');
}
/**
* お客様情報の変更(非会員)
*
* @Route("/shopping/customer", name="shopping_customer")
*/
public function customer()
{
return $this->redirectToRoute('homepage');
}
}
保存すると、ゲスト購入フロー自体がなくなります。やったね完成! …
ちゃんと解説をしますと…、
src配下に存在する NonMemberShoppingController.php で作られたゲスト購入フローに関係するルーティングを、
app配下に作ったNonMemberShoppingController.php でルーティングを上書きしています。
shopping/nonmember などにアクセスしたら homepage(サイトTOP)へリダイレクトするように処理を書き換えています。
おわりに
いかがでしたでしょうか。完全会員制サイトを作りたい方はぜひご参考ください。
記事中で紹介しましたEC-CUBE4のカスタマイズ例につきましては、実際に試す際にはしっかり検証を行い自己責任で反映をよろしくお願いいたします。
とてもわかりやすいです!!ありがとうございます