【EC-CUBE】デフォルト定休日カレンダー。指定した繁忙期を営業日にさせる方法

スポンサーリンク

EC-CUBEで、定休日カレンダーを改造し、指定した繁忙期を営業日にさせる方法。

デフォルトでは、土日が強制的に休日となっていますが、これでは非常に使い勝手が悪いです。

通常は日曜休みだけど、「繁忙期は休まず営業します」という場合に対応したカレンダーです。

設定例:

  • 通常は、日曜だけ休み
  • 7/1〜8/15は、休まず営業
  • 12/1〜12/30も、休まず営業
EC-CUBE:4.2.3

Block/Calendar.twig

{# 定休日カレンダー(繁忙期は無休) #}
{# 繁忙期の設定 #}
{% macro is_busy_season(month, day) %}
{{-
(month == 7) or
(month == 8 and day <= 15) or
(month == 12 and day >= 1 and day <= 30)
-}}
{% endmacro %}

{# HTMLヘッダー定義 #}
{% set calendar_thead = '<thead><tr><th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th></tr></thead>' %}

{# カレンダーテーブル生成マクロ #}
  {% macro calendar_table(monthTitle, calendar, id_prefix, thead) %}
  {% import _self as self %}
  {% set month = monthTitle|split('月')[0]|split('年')[1]|number_format %}
    <table id="{{ id_prefix }}-table" class="tbl_calendar"> {{ thead|raw }}
    <tbody>
      <tr>
        {% for day in calendar %}
          {% if day.day is not empty %}
            {% set is_busy = self.is_busy_season(month, day.day) %}
            {% set is_holiday = (day.holiday or day.dayOfWeek == 'Sun') and not is_busy %}
            {% set cell_class = day.today ? 'calendar_today' : '' %}
            {% set cell_class = is_holiday ? cell_class ~ ' calendar_holiday' : cell_class %}
            {% if cell_class is empty %}
              {% set cell_class = 'calendar_day' %}
            {% endif %}
            <td id="{{ id_prefix }}-{{ day.day }}" class="{{ cell_class }}">
              {{- day.day -}}
            </td>
          {% else %}
            <td class="calendar_day"></td>
          {% endif %}
          {% if loop.index % 7 == 0 and loop.index != calendar|length %}
          </tr>
          <tr>
          {% endif %}
        {% endfor %}
      </tr>
    </tbody>
  </table>
{% endmacro %}
<h2>定休日カレンダー</h2>
<div class="row g-3">
  <div class="col-12 col-sm-6">
    <div class="title_month">{{ ThisMonthTitle }}</div>
    {% import _self as cal %}
    {{ cal.calendar_table(ThisMonthTitle, ThisMonthCalendar, 'this-month', calendar_thead) }}
  </div>
  <div class="col-12 col-sm-6">
    <div class="title_month">{{ NextMonthTitle }}</div>
    {{ cal.calendar_table(NextMonthTitle, NextMonthCalendar, 'next-month', calendar_thead) }}
  </div>
</div>
  • {# 繁忙期の設定 #}の条件を変更すると、お好みの繁忙期を設定することができます
  • デフォルトのCalendar.twigは、非常に冗長なコードなので、メンテしやすく改造してあります。
  • 祭日などのイレギュラーな休日は、通常のカレンダー設定画面で行います。
  • Bootstrap。
デフォルトのカレンダーの機能がマジ使えなすぎる…

コメント

タイトルとURLをコピーしました