休日設定プラグイン オンラインマニュアル
Hholiday — 祝日自動同期、直感的なFlatpickrカレンダー、定休日設定、リアルタイムデザインプレビュー、ショートコード埋め込み、配送希望日連動を備えた高機能営業スケジュール管理
1プラグイン概要
休日設定プラグイン(Hholiday)は、EC-CUBE 4.2 / 4.3 サイトにおいて、店舗の定休曜日(毎週日曜日など)やGW・お盆・年末年始などの臨時休業日を管理画面から直感的に登録し、フロントエンドに洗練された営業日カレンダーを表示するプラグインです。
日本の**国民の祝日APIからのワンクリック自動同期**、**注文時の「配送希望日」プルダウンからの休日自動除外**、**リードタイム自動延長**、**リアルタイムカラーカスタマイズ**、**どこでも貼れるショートコード [calendar]** など、ECサイトの出荷管理と顧客満足度(CS)向上に必要なあらゆる機能を1つの画面に統合しています。
主な機能ハイライト
[calendar] を貼るだけでカレンダーを自動描画。holiday_calendar())から指定月のカレンダーを自由に描画可能。2インストール・有効化
2-1. ファイル配置
プラグインのプログラムファイルを EC-CUBE の Plugin ディレクトリへ配置します。
/path/to/eccube/app/Plugin/Hholiday/ ← ここに配置2-2. コマンドでの有効化
EC-CUBE ルートディレクトリにて以下のコマンドを実行します。
cd /path/to/eccube
php bin/console eccube:plugin:install --code=Hholiday
php bin/console eccube:plugin:enable --code=Hholiday
php bin/console cache:clearplg_holiday, plg_holiday_config)およびレイアウト用「Holidayブロック」が自動生成されます。3統合管理画面(4つのタブ機能)
管理画面の 設定 ➔ 店舗設定 ➔ 休日設定 を開きます。すべての機能が直感的な4つのタブに集約されています。
【Tab 1】 カレンダー・休日一覧(個別休日の登録・祝日同期・CSV機能)
カレンダーを見ながらの日付選択や、祝日データの自動同期、登録済み休日の管理を行います。
インラインカレンダー(Flatpickr)で日付選択
日付入力欄をクリックするとカレンダーが展開され、休日に設定したい日付をクリックするだけで直感的に選択できます。
休日の備考(ツールチップ)入力
「夏季休業」「棚卸し」「臨時休業」などの理由を入力できます。フロントエンドのカレンダーで該当日にマウスを乗せた際、ツールチップとしてポップアップ表示されます。
国民の祝日を自動同期
右上の「祝日を自動同期」ボタンをクリックすると、日本の国民の祝日データを自動取得し、「元日」「成人の日」「海の日」等の名称付きで一括登録します(登録済みの日付は自動スキップ)。
過去の休日を一括削除
「過去の休日を一括削除」ボタンを押すだけで、今日より前の過ぎ去った過去の休日データをデータベースから一括クリーンアップできます。
CSVエクスポート&インポート
登録済み休日の一括ダウンロードや、Excel・スプレッドシート等で編集したCSVファイル(日付,備考)からの一括インポートに対応しています。
【Tab 2】 基本・定休日・配送設定(配送希望日連動 & リードタイム)
毎週の定休日やフロントエンドの表示月数、購入手続き画面での配送日連動を設定します。
| 設定項目 | デフォルト | 機能・説明 |
|---|---|---|
| 定休曜日 | 未選択 | 毎週決まった曜日に休業する場合にチェック(日曜日・土曜日など)。カレンダーに自動反映され、配送希望日除外にも連動します。 |
| 表示月数 | 2 ヶ月 | フロントエンドに表示するカレンダーの月数を 1〜6 ヶ月 の間で選択します。 |
| 配送希望日からの除外 | ON (有効) | 購入手続き画面の「お届け希望日」選択肢から、登録された個別休日および定休曜日を自動的に非表示にします。 |
| リードタイム自動延長 | OFF (無効) | 出荷休業日を挟む注文の場合、出荷遅延を防ぐため最短お届け日を休業日数分自動で後ろ倒しして計算します。 |
| 当日発送の締切時間 | 未設定 (終日) | 例: 「14:00」。設定した時間を過ぎた注文は翌営業日受付として配送リードタイムを計算します。 |
【Tab 3】 デザイン・表示設定(リアルタイムプレビュー対応)
ショップのブランドイメージに合わせて配色や表示テキストを自由にカスタマイズできます。右側のプレビュー画面でリアルタイムに変更結果を確認できます。
| 設定項目 | デフォルト値 | 機能・説明 |
|---|---|---|
| カレンダータイトル | 営業日カレンダー | カレンダーブロック上部に表示する見出しテキスト(未入力時は非表示)。 |
| 下部のご案内・備考 | ※赤字は休業日となります... | カレンダー下部に表示するご案内メッセージ(改行対応)。 |
| 凡例の表示 | ON (表示する) | カレンダー下部の「■ 休業日」凡例マークの表示/非表示を切り替えます。 |
| テーマカラー設定 | カラーピッカー | 休業日背景色(#f9a9a9)、休業日文字色(#000000)、当日枠線色(#ff4242)、日曜文字色(#dc2626)、土曜文字色(#1d4ed8)を自由に設定可能。 |
【Tab 4】 ショートコード・埋め込み機能(ワンクリックコピー対応)
EC-CUBEの自由エリア、固定ページ、商品説明文、お知らせ等に貼り付けるだけでカレンダーを描画できるショートコード [calendar] のテンプレート集です。
4配送希望日除外 & リードタイム連動
お客様が商品を購入する際、お届け希望日の選択プルダウンから店舗の休業日が自動的に取り除かれ、スムーズな出荷業務を実現します。
1. 個別登録された休日(祝日、夏季休業、年末年始、臨時休業など)
2. 毎週の定休曜日(日曜日、水曜日など設定した曜日)
上記の日付は配送希望日の選択肢から自動的に除外されるため、「休業日に届く指定をされて出荷が間に合わない」というトラブルを防止します。
さらに「リードタイム自動延長」を有効にすると、休業期間中の注文であっても最短配送可能日が休業日数分自動的に後ろ倒しされて計算されます。
5フロントエンドでのカレンダー配置
本プラグインでは、サイト内にカレンダーを表示する方法として 「1. レイアウトブロック配置」 と 「2. ショートコード埋め込み」 の2通りを用意しています。
5-1. レイアウト管理でのブロック配置
サイドバーやフッターなど、サイトの共通エリアに常時カレンダーを表示したい場合は、標準のEC-CUBEブロック機能を使用します。
レイアウト管理を開く
管理画面の デザイン管理 ➔ レイアウト管理 を開きます。
対象ページの選択
カレンダーを表示させたいページ(例: トップページや下層共通枠など)を選択します。
「Holiday」ブロックを配置
未使用ブロックエリアにある 「Holiday」 ブロックを、任意の場所へドラッグ&ドロップして保存します。
5-2. ショートコードによる自由な埋め込み
固定ページ本文、商品説明文、新着情報記事、フリーエリアブロックなど、好きなページの好きな位置にピンポイントでカレンダーを表示したい場合は、ショートコード [calendar] を使用するのが最も簡単で柔軟です。詳細は次のセクションをご覧ください。
6ショートコード活用ガイド ([calendar])
バージョン 1.3.1 より、EC-CUBEの自由入力エリアに [calendar] と記述するだけで、リアルタイムな営業日カレンダーが自動描画されるショートコード機能が追加されました。
6-1. ショートコードの特長
- どこでも貼るだけ: フリーエリア、固定ページ、商品説明文、お知らせ等に貼り付けるだけで自動的にHTMLへ置換されます。
- 月数・開始月の自由な指定: 1ヶ月だけコンパクトに表示したり、3ヶ月連続表示したり、翌月スタートにするなどパラメータで柔軟に制御できます。
- デザイン設定が自動連動: 管理画面の「デザイン・表示設定」で設定した配色テーマがショートコードにも自動適用されます。
- タイトル・注記の個別カスタマイズ: その配置場所専用のタイトルや注記メッセージをパラメータで個別に上書きできます。
6-2. パラメータ仕様一覧
| パラメータ | 指定形式 | デフォルト値 | 説明・入力例 |
|---|---|---|---|
months | 数値 (1〜6) | 管理画面の表示月数 | カレンダーの表示月数を指定します。 例: [calendar months=1]、[calendar months="3"] |
start | 文字列 (YYYY-MM) | 当月 (現在月) | カレンダーの開始年月を指定します。来月以降の予告カレンダー等に便利です。 例: [calendar start="2026-10" months=2] |
title | 文字列 | 管理画面のタイトル | カレンダー上部の見出しタイトルを個別設定します(空文字で非表示)。 例: [calendar title="夏季休業のお知らせ"] |
caption | 文字列 | 管理画面の案内文 | カレンダー下部に表示する注記テキストを設定します。 例: [calendar caption="※8/13〜8/16はお盆休みとなります"] |
legend | 真偽値 (true / false) | 管理画面の設定値 | 「■ 休業日」の凡例マークを表示するかどうかを切り替えます。 例: [calendar legend=false] |
6-3. よく使う記述パターンと使用例
① 基本カレンダー(管理画面の設定通りの月数・配色で表示)
[calendar]② 1ヶ月のみコンパクト表示(サイドバーやスマホ向け)
[calendar months=1]③ 3ヶ月連続表示(フッターやご利用案内ページ向け)
[calendar months=3]④ 指定した年月から表示(来月以降のスケジュール予告)
[calendar start="2026-10" months=2]⑤ イベント・連休用のタイトル&注記カスタム
[calendar title="年末年始の営業について" months=2 caption="※12/30〜1/3は発送停止期間となります。ご注文は24時間承っております。"]6-4. おすすめの設置場所
[calendar] と書くだけで自由なレイアウト枠に配置可能。[calendar months=3] を挿入して分かりやすく案内。[calendar months=1] を埋め込み可能。[calendar title="GW休業日程" months=2] を直接貼り付けて告知。7過去データ一括削除 & CSV機能
7-1. 過去の休日一括削除
「カレンダー・休日一覧」タブの右上にある 「過去の休日を一括削除」 ボタンを押すと、今日より前の過ぎ去った過去の休日データをデータベースから一括削除し、データベースを常にクリーンに保てます。
7-2. CSVインポート / エクスポート
休日データ(形式: YYYY-MM-DD,備考)のCSV出力および一括登録に対応。CSVインポート時は過去日付の自動スキップ処理および既存重複チェックが行われます。
8開発者向けガイド:任意ページでの指定月カレンダー取得・表示
本プラグインは、ショートコードや標準ブロックだけでなく、独自のControllerや任意のTwigテンプレートから指定年月の休日データを取得し、自由にカレンダーや休業日案内を埋め込むための拡張API・Twig関数を提供しています。
8-1. Twig 関数でカレンダーを直接描画する (holiday_calendar)
テーマファイル(.twig)内でカレンダーHTMLを直接出力したい場合は、Twig関数 holiday_calendar() を使用します。
{# 基本描画(管理画面の設定値を使用) #}
{{ holiday_calendar() }}
{# 引数で月数・開始年月を指定 #}
{{ holiday_calendar(months=2, start='2026-10') }}
{# 連想配列でオプションを一括指定 #}
{{ holiday_calendar({
'months': 3,
'start': '2026-10',
'title': '休業日カレンダー',
'caption': '※毎週水曜・日曜は定休日です',
'legend': true
}) }}8-2. Twig フィルタでテキスト内のショートコードを変換する (holiday_shortcode)
変数の文字列内に含まれる [calendar ...] ショートコードをHTMLに変換して出力します。
{# ページ本文や商品詳細のカスタムフィールド等を出力する場合 #}
{{ Page.content|holiday_shortcode|raw }}8-3. PHP Controller / 独自Service から取得する場合
Plugin\Hholiday\Service\HolidayCalendarService をコンストラクタでインジェクションし、getHolidayDataForMonth() を呼び出します。
<?php
namespace Customize\Controller;
use Eccube\Controller\AbstractController;
use Plugin\Hholiday\Service\HolidayCalendarService;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class CustomHolidayPageController extends AbstractController
{
private HolidayCalendarService $holidayCalendarService;
public function __construct(HolidayCalendarService $holidayCalendarService)
{
$this->holidayCalendarService = $holidayCalendarService;
}
/**
* @Route("/special-schedule", name="custom_special_schedule")
*/
public function index(): Response
{
// 例1: 当月から管理画面で設定された月数分の休日データを取得
$holidayData = $this->holidayCalendarService->getHolidayDataForMonth();
// 例2: 2026年12月を指定して、1ヶ月分のみの休日データを取得
// $holidayData = $this->holidayCalendarService->getHolidayDataForMonth('2026-12', 1);
/*
* 返却される配列構造 ($holidayData):
* - 'dates' : 休日のYYYY-MM-DD文字列配列 (例: ['2026-12-06', '2026-12-13', ...])
* - 'notes' : 休日の備考連想配列 (例: ['2026-12-31' => '年末休業'])
* - 'months' : 表示対象月の DateTime オブジェクト配列
* - 'config' : Plugin\Hholiday\Entity\Config エンティティ (色設定・タイトル等)
*/
return $this->render('Custom/schedule.twig', [
'holidayData' => $holidayData,
]);
}
}8-4. Twig テンプレートから直接データ配列を取得する場合 (holiday_calendar_data)
カレンダーのUIを独自にHTML/CSSでマークアップしたい場合は、holiday_calendar_data(startMonth, displayMonths) 関数でデータのみを取り出せます。
{# 例: 2026年10月の休日データを取得してリスト表示する #}
{% set oct_data = holiday_calendar_data('2026-10', 1) %}
<div class="custom-holiday-list">
<h4>10月の休業日案内</h4>
<ul>
{% for holidayDate in oct_data.dates %}
<li>
{{ holidayDate }} :
{{ oct_data.notes[holidayDate]|default('定休日・休業日') }}
</li>
{% else %}
<li>今月の休業予定はありません。</li>
{% endfor %}
</ul>
</div>9よくあるご質問(FAQ)
Q1. カレンダーブロックが表示されません。
A. 「デザイン管理 ➔ レイアウト管理」にて「Holiday」ブロックが配置されているか、またはページ本文内にショートコード [calendar] が記述されているかをご確認ください。また、コマンド php bin/console cache:clear でキャッシュをクリアしてください。
Q2. 祝日の自動同期を押しても重複して登録されませんか?
A. すでに登録済みの日付は自動的にスキップされるため、重複登録される心配はありません。安心して定期的に同期ボタンを押してください。
Q3. カレンダーの色やデザインを変更したい。
A. 管理画面の「店舗設定 ➔ 休日設定 ➔ デザイン・表示設定」タブから、カラーピッカーでリアルタイムに色を変更して保存できます。ショートコードで埋め込んだカレンダーにも自動適用されます。
Q4. 特定のページやフリーエリアにだけカレンダーを表示できますか?
A. はい、非常に簡単です。表示したいフリーエリアや固定ページの本文に [calendar](または [calendar months=1]、[calendar start="2026-10" months=2] 等)と記述するだけで自動的に埋め込まれます。
Q5. 1つのページに異なる月のカレンダーを複数配置できますか?
A. はい、可能です。例えば [calendar months=1] と [calendar start="2026-10" months=1] を同じページ内に並べて記述することも可能です。