【開発コミュニティの人気Tipsをご紹介①】「すぐに購入する」ボタンを追加してみる

#集客・販促・運営

EC-CUBE公式アドバイザーに
ご相談いただけます

まずは相談する

こんにちは、EC-CUBEエバンジェリスト 足立智広です。

EC-CUBEでは、ご利用者同士が問題解決方法を投稿・共有できる「開発コミュニティ」を開設し、多くの方にお使いいただいています。
(2017年2月時点で、総メンバー数は19,016名・総投稿数は79,323件です)

この連載では、そんな開発コミュニティで話題となっているカスタマイズをピックアップして、ご紹介していきたいと思います。

EC-CUBE 3.0系に、「すぐに購入する」ボタンを追加するカスタマイズ

今回は、Amazon(アプリ版)のように、「すぐに購入する」ボタンを追加するカスタマイズをご紹介します。

こんな感じの仕様です。

  1. 商品詳細画面に、「すぐに購入する」ボタンを追加する
  2. 「すぐに購入する」ボタンを押すと、カート画面ではなく購入確認画面に遷移する

※前提として、EC-CUBE のバージョンは3.0.13です。また、プラグインではなく、本体のコードを直接変更しています。

EC-CUBE公式アドバイザーが、ツール選びからサイト制作、マーケティング・セキュリティの領域までアドバイスいたします。ご相談窓口はこちら

ボタンを追加するためのソースコード

商品詳細画面のテンプレート(twigファイル)に、ボタンのhtmlを記述します。
テンプレートファイルは、src/Eccube/Resource/template/Product/detail.twig にあります。

【POINT】テンプレートの場所は、だいたいURLと同じパスになっているので、URLをヒントに探すとよいでしょう。

detail.twigの244行目付近を以下のように修正します。
お気に入りボタンの下に、「すぐに購入する」ボタンを配置しました。

            <li class="col-xs-12 col-sm-8"><button type="submit" id="favorite" class="btn btn-info btn-block" disabled="disabled">お気に入りに追加済みです</button></li>
        {% endif %}
    </ul>
    {% endif %}
    <ul class="row">
        <li class="col-xs-12 col-sm-8"><button type="submit" id="skip-cart" class="btn btn-default btn-block prevention-btn prevention-mask">すぐに購入する</button></li>
    </ul>
</div>

次に、このボタンが押されたときのmode変数を設定するjavaScriptを記述します。
detail.twigの82行目付近を以下のように修正します。

$('#skip-cart').click(function() {
        $('#mode').val('skip_cart');
});

以上でtwigファイルの修正は完了です。

「すぐに購入する」ボタンを追加した時のロジックを作成する

カートへの追加や、お気に入りへの追加処理は、ProductControllerで制御されています。
ファイルの場所は、src/Eccube/Controller/ProductController.phpです。

296行目付近を以下のように修正します。

    }

    return $app->redirect($app->url('cart'));
// mode=shoppingの際は, カート画面をスキップして購入確認画面へリダイレクトする
} elseif ($addCartData['mode'] === 'skip_cart') {
    try {
        // カートをクリアする.
        $app['eccube.service.cart']->clear();
        // カートへ商品を追加する.
        $app['eccube.service.cart']->addProduct($addCartData['product_class_id'], $addCartData['quantity']);
        // カートをロック状態に設定.
        $app['eccube.service.cart']->lock();
        // カートを保存.
        $app['eccube.service.cart']->save();
    } catch (CartException $e) {
        // エラーが発生した場合は, カート画面で表示させる
        $app->addRequestError($e->getMessage());

        return $app->redirect($app->url('cart'));
    }

    // 購入確認画面へリダイレクト.
    return $app->redirect($app->url('shopping'));
}

行っている処理を解説すると、

  1. mode=slip_cartの場合に処理する
  2. カートをクリアして、商品を追加
  3. カートをロックして、保存
  4. 購入確認画面へリダイレクト

ということをやっています。

以上でカスタマイズは完了です。
動作確認をして、購入確認画面へ遷移するか試してみましょう。尚、作成したソースコードの差分は以下でもご覧いただけます。

最後に

いかがでしたでしょうか?

開発コミュニティでは、「EC-CUBE」 をより快適で便利なものにしていくために、エンジニアの方はもちろんのこと、ショップ運営者の方、デザイナーの方など、 EC構築・運営に関わる多くの方々のご参加をお待ちしています。

「どうか教えてください!」「バグ見つけましたよ」「こんな機能あったらなぁ」といったテーマごとにスレッドが分かれていますので、気になるキーワードがあれば一度、開発コミュニティへ訪れてみてください。

この記事を書いた人

株式会社イーシーキューブ

ECサイトを新しく立ち上げたい、ECサイトの運営について詳しく知りたい、そんな方にお役立ちする情報を分かりやすく解説し、発信しています。

#集客・販促・運営

ECサイト制作に関するご希望やお悩み、
まずはEC-CUBE公式アドバイザーにご相談ください。

他の記事もご覧ください

記事一覧に戻る

EC-CUBE公式アドバイザー
ご相談窓口

  • 他社のASPやパッケージとの違いを知りたい
  • BtoCのサイトにBtoB機能を追加したい
  • 何から手をつければよいかわからない
  • オープンソースならではの注意事項を知りたい
  • 自社にマッチした制作会社を探したい
  • サイト制作だけでなく運営もサポートしてほしい

新規構築・リニューアル・取引先向けのWeb受発注システム(BtoB)や事業の拡大など、
今抱えている課題を解決する最適な業者探しを、アドバイザーがお手伝いします。