EC-CUBE4ではプラグインのネームスペースを用いたテンプレートをapp/template内に配置してオーバーライドすることができませんでした。
そのためテンプレートを修正したいときにプラグインのテンプレートを直接修正するか悩むようなことがちらほらありました。

しかしEC-CUBE4.0.5では待望のプラグインテンプレートをオーバーライドできる機能が加わる予定です。すぐに使いたい方はパッケージ版ではなくGit版で最新のコードを確認してみてください。

オーバーライドの仕組みを弊社のプラグイン「商品ページポイント数表示 for EC-CUBE4」を例にとってご紹介いたします

この記事は一度間違って4.0.4で公開してしまい、後から修正しました

プラグインの宣伝

商品詳細ページにポイント数を表示するプラグインです。規格選択時のポイント数動的表示にも対応しています。

獲得ポイント数表示プラグイン

https://www.ec-cube.net/products/detail.php?product_id=2102

ポイント数を表示しているソースコードはどこ?

プラグイン側では$event->addSnippet(‘@ShowPointAmount4/product_detail_point.twig’);と言うようにプラグインのネームスペースを用いてTwigを呼び出しています。

app/Plugin/ShowPointAmount4/Resource/template/product_detail_point.twig というファイルが呼び出され商品詳細ページのテンプレートにポイント数を表示しています。

product_detail_point.twigは.ec-productRole__priceというクラスの要素の直後にポイント数のブロックを挿入するという内容になっています。
※つまり、もしテンプレートを修正していて、ec-productRole__priceというクラスがProduct/detail.twig内から削除されているとプラグインが動作しません。

<div id="ec-point" class="ec-productRole__code">
    ポイント:
    <span class="ec-point__point point-default">{{ point_min|number_format }}{% if point_min != point_max  %} ~ {{ point_max|number_format }}{% endif %}</span>pt
</div>

<script>
    $(function() {
        $('.ec-productRole__price').after($('#ec-point'))
    })
</script>

app/template/plugin/[プラグインコード]でオーバーライド

さて、いよいよここからが本題です。product_detail_point.twigをコピーして、app/template/plugin/ShowPointAmount4/product_detail_point.twig に配置します。
app/template/plugin/[プラグインコード]の中に配置するのがポイントです。

このファイルは好きに書き換えることが可能ですので、ec-productRole__priceクラスの直後ではなく好きな場所に表示することが可能です。すばらしいEC-CUBE4.0.5!!!(現時点ではRCなので予定)

Product/detail.twigに直接書いた方が早いという話も..

ただ実際はプラグインのテンプレートをオーバーライドするよりもProduct/detail.twigに直接書いてしまった方が早いです。
その際のポイントは「is defined」を使ってプラグインが無効化された時にエラーとならないよう対応しておくことです。

{% if point_min is defined  and point_max is defined  %}
<div id="ec-point" class="ec-productRole__code">
    ポイント:
    <span class="ec-point__point point-default">{{ point_min|number_format }}{% if point_min != point_max  %} ~ {{ point_max|number_format }}{% endif %}</span>pt
</div>
{% endif %}

しかし元のテンプレートをなるべく修正したくないような時もありますので、プラグインテンプレートのオーバーライドは覚えておいて損はない技だと思います。

日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

EC-CUBEカスタマイズに関するお問い合わせはこちら


    [重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。

    EC-CUBEバージョンアップ