EC-CUBE3

EC-CUBE3でDBに触らずに動的ブロックの複製を作る

EC-CUBE3で"カテゴリ"のブロックがもう一つ欲しいなと思ったのだけど、DBから値を読んでくる動的ブロックを作るのは意外と面倒。

EC-CUBE3でブロックを追加する方法

同じhtmlでいいのにDBや本体ファイルを触るのはちょっとなあとということで、twigのほうで細工してみる。

  1. EC-CUBE管理画面の[コンテンツ管理]>[ブロック管理]でcategory2というファイル名のブロックを作る。
  2. src/Eccube/Resource/template/default/block.twigapp/template/default/block.twigにコピーして、以下のように書き換える。
block.twig
{% for Block in Blocks %}
    <!-- ▼{{ Block.name }} -->
    {% set file_name = Block.file_name %}
    {% set logic_flg = Block.logic_flg %}
    {% if file_name == 'category2' %}
        {% set file_name = 'category' %}
        {% set logic_flg = 1 %}
    {% endif %}
    {% if logic_flg %}
        {% if app.config.http_cache.enabled %}
            {{ render_esi(path('block_' ~ file_name)) }}
        {% else %}
            {{ render(path('block_' ~ file_name)) }}
        {% endif %}
    {% else %}
        {{ include('Block/' ~ file_name~ '.twig', ignore_missing = true) }}
    {% endif %}
    <!-- ▲{{ Block.name }} -->
{% endfor %}

Block.file_nameに直接代入できないのでちょっと冗長ですね。
要は、特定のブロック名が来たら既存の動的ブロックのファイル名に差し替えてやればよいのです。
あとは新しく作ったブロックを必要なページに配置しましょう。

なお、Block/category.twigはhtmlにid属性を含んでいるので、classに書き換えてやる必要がありますが、そこのところは省略。