エンジニ屋.com(エンジニヤドットコム)

ITエンジニアによる開発・転職・資格取得記録などを書いてます!

【カスタマイズ】ゲスト購入不可にする方法【Eccube4】

デフォルトのゲスト購入可能仕様を不可にカスタマイズ

購入フロー中のレジに進むボタンをクリックすると、 ログイン画面にリダイレクトされる。 ログイン画面には、ゲスト購入ボタンも表示されるので、カスタマイズにてゲスト購入を不可にする。

Eccube4バージョン

  • Eccube4.0.6

イメージ画像

ログイン画面

twigファイルのログイン画面のゲスト購入を非表示

レジに進むで表示されるログイン画面は、通常のログイン画面と異なるsrc\Eccube\Resource\template\default\Shopping\login.twigのファイルで表示されている。こちらをコピーして、 app\template\default\Shopping\login.twigを作成。 71行目から下記のようにコメントアウトかコードを削除。

// 71:
{# {% 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 %} #}

71行目のis_grantedはtwigでも使用できるsymfonyで定義されたメソッドです。 'IS_AUTHENTICATED_REMEMBERED'は「自動的にログインする」機能によってログインしたユーザーの場合、trueが返されるので、== falseの場合は、ゲスト購入が表示されるように作成されています。

見た目を修正

非表示になっただけで、ポッカリと右側に空白ができるので、24行目あたりのcssを少し変更します。

// 24:
<div class="ec-off2Grid">

            <div class="ec-off2Grid__cell">

これで良い感じに中央に設置ができました。

Cotrollerの変更

これだけでは、もしshopping/nonmemberとURLを直接入力した場合、ゲスト購入はまだ可能な状態です。 なので、もしURLで直接アクセスを受けたとしても、トップページへリダイレクトを掛けておきます。 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');
    }
}

URLからアクセスを受けた際にredirectToRoute()でトップページにリダイレクトを掛けています。

以上となります。

最後に

Eccubeはsymfonyのフレームワークで構成されています。もし「自力でもっとカスタマイズしたい」や「仕事でEccubeで開発することになった」方には、下記のsymofony4 入門の参考書をおすすめします。
こちらの参考書にはEccubeのカスタマイズ方法については、記載されてませんがカスタマイズに必要な知識Entity、Controller、twig、Repositoryなどの利用方法が非常に分かりやすく書かれています。筆者も仕事でEccubeに携わることとなり、参考書を購入し理解が深まりました。 symfonyはLaravelと密接している部分もありLaravelの構成部分の理解も深まり有益でした。
価格帯は若干高めですが、中身はしっかりしているので、購入して損はないと思います。