インストールをお任せしますか?
お客様のサーバーに導入・設定します。簡単な見積もりの後、固定価格でお受けします。
🌐 言語: 🇻🇳 Tiếng Việt · 🇬🇧 English · 🇯🇵 日本語(現在)
S-Cart(GP247)向け Product Flash Sale プラグイン
はじめに
このドキュメントでは、Product Flash Sale プラグインのインストール方法と使い方を説明します。このプラグインは、時間帯を区切り、販売数量を限定して販売する(「20個限定、3時間だけ」)ためのツールです。対象はショップオーナーと GP247 サイトの管理者で、プログラミングの知識は必要ありません。読み終えると、ご自身でタイムセールを作成してトップページに表示でき、システムがときどき操作を拒否する理由も理解できます。
タイムセールは既存の「プロモーション」と何が違うのですか?
GP247 のショップには、もともとプロモーションがあります。一定の日付範囲に適用される価格で、通常は数週間続きます。そのため、ショップのデフォルトの「Promotion products」ブロックにはカウントダウンがありません。2か月続くキャンペーンにカウントダウンを付けるのは、偽りの希少性を演出することになるからです。
タイムセールは数えられる約束です:この時間帯に、N個だけ。プラグインは既存のプロモーションに、ちょうど2つのものを追加します:セールの数量と表示順です。そのおかげで、ここでのカウントダウンと「販売済み / 残り」のバーは本物になります。
インストール前の要件
- GP247 core バージョン 3.0 以上。
gp247/shopパッケージ(販売機能)がインストール済みであること。このパッケージがないとプラグインは動作しません。
インストール
-
プラグインのソースフォルダーをサイトの正しい場所に配置します。
app/GP247/Plugins/ProductFlashSale -
管理画面にログインし、「Extensions / Plugins」メニュー(プラグイン管理)を開きます。
-
Product Flash Sale の行を探し、「Install」をクリックしてから「Enable」をクリックします。
成功すると、インストール成功のメッセージが表示されます。互換性がないと表示された場合は、ほぼ確実にサイトが 3.0 より古い core で動いています。先に core を更新してください。
-
システムは3つのことを自動で行います:データテーブル
shop_product_flashを作成し(まだない場合)、「Catalog」(カタログ)グループの下にメニュー項目を追加し、このブロックがまだないストアのトップページの最下部にタイムセール帯を配置します(「レイアウトブロック」画面の有効な1行)。product_flash_saleブロックは、レイアウトブロック画面の選択欄にもすぐに表示されます。プラグインはブロックをシステムに登録するだけで、テンプレートのフォルダーにファイルをコピーしないため、ブロックはどのテンプレートでも動作し、プラグインをアンインストールするときれいに消えます。帯を削除したり別の場所に移動したりした場合、今後プラグインを更新しても元には戻りません。表示場所はあなたが決めることで、プラグインはインストール時に一度だけ提案するだけです。
-
サイトでキャッシュを有効にしている場合は、キャッシュを一度クリアします。
php artisan optimize:clear -
新しく表示された「タイムセール」(Product Flash Sale)メニューを開きます。2カラムの画面(左がフォーム、右が空の一覧)が表示されれば、プラグインの準備は完了です。
プラグインを再インストールまたは更新しても、データは失われません。 テーブルはないときだけ作成され、メニュー項目は足りないときだけ追加されます。テーブルが削除されるのは「Uninstall」を押したときだけです。
コマンドラインでインストール(CLI、gp247 3.x)
gp247 3.x 以降では、管理画面を開かずに、GP247 ライブラリから ProductFlashSale をダウンロードしてコマンドラインですぐにインストールできます。Web サイトのルートフォルダーでターミナルを開き、次を実行します。
# 1) 各 Web サイトで1回だけ:GP247 ライブラリに接続するための API License(無料)を登録
php artisan gp247:ext-register-license
# 2) ライブラリからプラグインをダウンロードしてインストール
php artisan gp247:ext-install --type=plugin --key=ProductFlashSale
- 手順1の前に、
.envのAPP_URLが Web サイトの実際のドメインであることを確認してください(http://localhostのままにしないでください)。ライセンスはこのドメインに紐付けられます。 - インストールが完了すると、プラグインは有効化済みになり、キャッシュも自動で更新されます。管理画面で追加の操作は必要ありません。
- コマンドは
gp247.jsonで宣言された条件(core のバージョン、composer パッケージ、依存プラグイン)を自動で確認します。不足があれば、何が足りないかを明示して停止します。 - このプラグインには
gp247/shopパッケージのインストールが必要です。ない場合、コマンドは停止してお知らせします。 app/GP247/Plugins/ProductFlashSaleフォルダーが既にサーバー上にある場合(手動でコピーした、またはインストーラーに同梱されていた場合)、コマンドは再ダウンロードせずにその場でインストールします。- プラグインが既にインストールされている場合、コマンドは拒否します。新しいバージョンにするには
php artisan gp247:ext-update --type=plugin --key=ProductFlashSaleを実行します。 - コマンドの末尾に
--jsonを付けると、機械で読める形式の結果を受け取れます(スクリプト / CI 用)。 - このコマンドは上記の手順1〜3(フォルダーの配置、「Install」、「Enable」)の代わりになります。インストール後の手順はそのまま適用されます:手順4(システムがテーブルを作成し、メニューを追加し、トップページにタイムセール帯を配置)はまったく同じように行われ、手順5(サイトでキャッシュを有効にしている場合は
php artisan optimize:clear)と手順6(「タイムセール」メニューを開いて確認)も同様です。 - 詳細:プラグインとテンプレートのインストールガイド · コマンドリファレンス。
タイムセールを作成する
-
「タイムセール」メニューを開きます。
-
左カラムの「商品を選択」欄に商品名の一部を入力し、候補一覧から選びます。
-
「数量」を入力します。これはセールで販売できる最大数量で、例えば
20です。 -
セールの「価格」を入力します。価格はサイトの基本通貨で入力します(欄の下の小さな文字で、どの単位で入力しているかが表示されます)。
-
「開始」と「終了」を選びます。カレンダーでは時・分まで指定できます。ここが通常のプロモーションとの違いで、同じ日の 20:00 から 23:00 までのセールを設定できます。
-
「並び順」を入力し(数値が小さいほど販売ページで先に表示されます)、「ステータス」スイッチをオンにします。
-
「保存」をクリックします。成功すると、セールが右側の一覧にすぐ表示され、進捗バーは
0 / 20になります。 -
サイトのタイムセールページを開いて確認します(アドレスは次のセクションを参照)。セール期間中であれば、商品がカウントダウン付きで表示されます。
編集するには、該当する行の鉛筆アイコンをクリックし、変更して「保存」します。セールを早めに終了するには、「ステータス」スイッチをオフにするか、ゴミ箱アイコンで行ごと削除します(行を削除すると、商品のプロモーション価格も外れます)。
サイト上のタイムセールページ
一覧ページのアドレス:
https://<your-domain>/plugin/product_flash_sale/index
サイトで多言語 URL(GP247_SEO_LANG)を有効にしている場合、アドレスに言語コードが付きます。例:/ja/plugin/product_flash_sale/index。
このページは管理画面の「レイアウトブロック」画面のページ種類の一つでもあるため、他のページと同じように、バナー、HTML ブロック、静的ページを追加できます。セールの実施中は、検索エンジンが認識できるよう、このページが sitemap.xml に登録されます。
タイムセール帯をトップページに表示する
最も簡単なのは、管理画面の「レイアウトブロック」画面を使う方法で、ファイルを編集する必要はありません。
-
「レイアウトブロック」→「レイアウトブロックを追加」(Add block layout) を開きます。
-
「種類」(Type) で
Viewを選びます。 -
「位置」(Position) 欄で表示したい位置(例:下部の位置 / Position Bottom)を選び、「ページ」(Page) 欄で
front_home — Home pageを選びます。 -
「内容」(Text) 欄で、
product_flash_saleという名前のブロックを選びます。これはプラグインのブロックで、プラグインを有効にするとすぐに使えます。(すぐ隣の
shop_product_promotionブロックは、ショップに元からある「プロモーション商品」のブロックです。別のブロックで、カウントダウンはありません。) -
「Active」にチェックを入れて「送信」(Submit) をクリックし、トップページを再読み込みします。セールの実施中であれば、横にスクロールする商品の帯が表示され、各カードに割引率、販売済み / 残り、カウントダウンが表示されます。実施中のセールがない場合、帯は自動で非表示になり、トップページに空白はできません。
「内容」欄に
product_flash_saleが見つからない場合は? プラグインが「Enable」になっているか確認し(ブロックはプラグインが有効なときだけ表示されます)、php artisan optimize:clearを実行してから、レイアウトブロック画面を再読み込みしてください。
独自テンプレートを使っているサイト(GP247Front 以外の名前):追加の作業は不要です。バージョン 2.0.1 以降、ブロックはプラグインがシステムに直接登録し、テンプレート名に依存しないため、どのテンプレートでも「内容」欄に表示されます。
帯のデザインを変更したい場合は? プラグインフォルダー内のファイルは編集しないでください。プラグインを更新すると上書きされます。変更を保持できる方法が3つあります。下記の タイムセール帯のデザインをカスタマイズ をご覧ください。
手動で挿入する方法(レイアウトブロックを使わず、テーマ内の位置を固定したい場合):テンプレートのトップページのファイルを開きます。例:
app/GP247/Templates/{TEMPLATE_NAME}/screen/home.blade.php
表示したい場所に、次の1行だけを挿入します。
@include('Plugins/ProductFlashSale::blocks.product_flash_sale')
メニューやテーマ内の任意の場所にタイムセールページへのリンクを置く場合:
<a href="{{ gp247_route_front('product_flash_sale.index') }}">Flash Sale</a>
route(...) ではなく gp247_route_front(...) を使ってください。多言語サイトでもアドレスに正しい言語コードが付きます。
プラグインのコードを変更せずに一覧ページのデザインを変更したい場合は、次のファイルを作成します。
app/GP247/Templates/{TEMPLATE_NAME}/Plugins/ProductFlashSale/front_flash_sale.blade.php
プラグインのデフォルトの代わりに、テンプレート側のファイルが使われます。
タイムセール帯のデザインをカスタマイズ
プラグインのコードに触れずに帯のデザインを変更でき、プラグインを更新しても変更はそのまま残ります。方法は3つあり、目的を満たす最も軽い方法を選んでください。
方法1 — 帯を囲む(要素を追加したいだけの場合におすすめ)。 プラグインの帯はそのままに、その周りに独自のマークアップを追加します。次のファイルを作成します。
app/GP247/Templates/{TEMPLATE_NAME}/blocks/product_flash_sale.blade.php
内容:
<div class="container-x pt-6">
<h2 class="section-title">本日のゴールデンタイム</h2>
</div>
@includeIf('Plugins/ProductFlashSale::blocks.product_flash_sale')
@include ではなく @includeIf を使ってください。後でプラグインをアンインストールした場合、@includeIf は何も表示しないだけですが、@include はページに「View not found」エラーを出してしまいます。
方法2 — 帯を完全に書き直す。 上記と同じパスのファイルですが、マークアップをすべて自分で書き、データも自分で取得します。
@php
$products = gp247_product_flash(10);
@endphp
@foreach ($products as $product)
{{-- 独自のマークアップ --}}
@endforeach
方法3 — プラグイン内のビューを1つ上書きする。 小さな部分(例:商品カード、または一覧ページ)だけを変更し、残りはそのままにしたい場合は、次の場所に同じ名前のファイルを作成します。
resources/views/vendor/Plugins/ProductFlashSale/
例えば resources/views/vendor/Plugins/ProductFlashSale/partials/flash_card.blade.php は、プラグインの商品カードが表示されるすべての場所で置き換わります。この方法はプラグインのどのビューにも使えます。
共通の注意:方法2と方法3は固定されたコピーを作ります。今後プラグインがデザインを更新しても、上書きした部分にはその変更が反映されません。方法1にはこの欠点はありません。元に戻したい場合は、作成したファイルを削除するだけです。
販売数量のカウント方法
セールの数量は、注文のライフサイクルに沿って自動的に差し引かれ、戻されます。手動で調整する必要はありません。
- お客様が注文したとき:注文の作成中に数量が差し引かれます。2人のお客様が同時に購入しても、数量を超えて販売されることはありません。後の人は拒否され、その注文は作成されません。
- 注文のキャンセル、注文の削除、または注文内の商品行の削除時:在庫に商品が戻るのと同じように、数量がセールに戻されます。
- キャンセルされた注文を再開したとき:数量が再び差し引かれます。セールの数量が残っていない場合、再開は拒否されます。在庫がないときにシステムが拒否するのとまったく同じです。
- どのタイムセールにも含まれていない商品が、このプラグインによってブロックされることはありません。
複数ストアのサイトで使う(MultiStore / MultiVendor)
タイムセールは商品を所有するストアに属するため、表示範囲はサイトの共通ルールに従います。
- マーケットプレイス(MultiVendor):共通のストアフロントには、稼働中のすべてのショップのセールが表示されます。あるショップが無効化されると、そのショップのセールはマーケットプレイスから消えます。
- ドメインごとの複数ストア(MultiStore):各ストアには自分のセールだけが表示されます。
- 管理画面:ストアの管理者は、自分のストアの商品だけを閲覧・選択できます。ルート管理者はすべてのストアのセールを閲覧でき、一覧には所有ストア名を示す小さな行が追加されます。
- 顧客グループ別価格と併用する場合(MultiVendor Pro):タイムセール価格がベースとなり、グループ別価格はそれより低くなることはあっても高くなることはありません。その低い価格で購入しても、お客様はセールの数量を1つ消費します。
注意:タイムセールの作成画面はルート管理画面にあります。マーケットプレイス型では、ショップのスタッフがベンダー画面で自らタイムセールを作成することはできません。セールはマーケットプレイスの管理者が作成します。
条件と制約(操作の前に確認)
セールを作成・編集するとき
- 候補一覧にある商品を選ぶ必要があります。 一覧には、あなたのストアに属する単品 / セット商品(グループ商品ではない)だけが含まれます。保存時にもシステムが再確認するため、送信データを書き換えて「すり抜ける」ことはできません。
- 1つの商品に設定できるタイムセールは1つだけです。 同じ商品に2つのセールがあると、同じプロモーション価格を取り合うことになるため、システムが最初から防ぎます。
- 数量は1以上である必要があります。 数量のないセールでは、売るものがないためです。
- 数量は販売済みの数より少なくできません。 4個販売済みなのに3に変更すると、進捗バーが100%を超え、売れたからなのか数を変更したからなのか誰にもわからなくなるためです。
- 終了日時は開始日時より後である必要があります。 そうでないと、セールが実施されることはありません。
- セール価格は数値で、マイナスにはできません。 サイトの基本通貨で入力します。
商品が販売ページに表示されるとき
- セールが表示されるのは、セール期間中(日単位ではなく分単位で比較)で、かつステータススイッチがオンのときだけです。
- 完売したセール(
販売済み = 数量)は、タイムセール帯から自動的に外れます。 - 商品はショップの共通の表示条件も満たしている必要があります:販売中、承認済み、閲覧中のストアに属している、現在の言語の説明があること。いずれかが欠けていると、セールを作成していても商品は表示されません。
お客様が購入するとき
- 残りの数量を超えて購入すると、「先に売って後で調整」ではなく注文が拒否されます。これにより「N個限定」の約束が守られます。
- キャンセルされた注文の再開も、セールの数量が残っていなければ拒否されます。
プラグインの有効化・無効化・アンインストール
- 無効化(Disable):管理画面とサイト上のタイムセールページの両方が動作を停止します。データはそのまま残り、再び有効にすれば引き続き動作します。
- アンインストール(Uninstall):プラグインの設定、メニュー項目、データテーブル
shop_product_flashを削除します。商品に作成済みのプロモーション価格は一緒には削除されません。product_flash_saleブロックはプラグインと一緒に選択一覧から消え(プラグインはテンプレートにファイルを残しません)、そのブロックを配置していた位置には何も表示されなくなるだけです。 - プラグインの有効化 / 無効化はサイト全体に適用され、ストアごとに分けることはできません。
技術情報
-
販売ページのルート:
GET /plugin/product_flash_sale/index(ルート名product_flash_sale.index)。 -
管理画面のルート:
{GP247_ADMIN_PREFIX}/product_flash_sale、/create、/edit/{id}。 -
データテーブル:
shop_product_flash。id、product_id、stock(数量)、sold(販売済み)、sortを含みます。 -
価格と期間は、ショップに元からあるプロモーションのテーブル
shop_product_promotionに保存されます。 -
ビュー / 言語の名前空間:
Plugins/ProductFlashSale。 -
トップページのブロックは
Provider.phpからconfig('gp247-config.front.layout_block_views')(キーproduct_flash_sale)に登録されます。テンプレートフォルダーは同梱せず、app/GP247/Templatesにファイルをコピーすることもありません。システムはテンプレート側のファイルを先に探すため、ご自身で作成したファイルが常に優先されます。 -
テーマで再利用できる関数:
gp247_product_flash($limit = 8, $paginate = false); // タイムセール中の商品一覧 gp247_product_flash_check_over($productId, $quantity); // 数量が足りるか(true = 足りる) gp247_product_flash_update_stock($productId, $quantity); // 数量を差し引く。足りないときは false を返す gp247_product_flash_release_stock($productId, $quantity); // 数量をセールに戻すテーマで独自の一覧を作る例:
@php $products = gp247_product_flash(8); @endphp @foreach ($products as $product) <div>{{ $product->getName() }} — 販売済み {{ $product->pf_sold }}/{{ $product->pf_stock }}</div> @endforeach
よくある質問(Q&A)
Q1: セールを作成したのに、タイムセールページが空なのはなぜですか?
→ 通常は次の3つの理由のいずれかです:開始時刻になっていない、または終了時刻を過ぎている。ステータススイッチがオフになっている。または商品が共通の表示条件を満たしていない(販売がオンになっていない、承認されていない、閲覧中の言語の説明がない)。
Q2: カウントダウンはどの時刻を基準にしていますか?
→ そのセール自身の「終了」日時を基準にしています。各商品カードは、それぞれのセールに応じた独自のカウントダウンを持っています。
Q3: お客様が注文をキャンセルした場合、数量は戻りますか?
→ はい、自動で戻ります。注文のキャンセル、注文の削除、注文内の商品行の削除のいずれでも、数量はセールに戻されます。
Q4: 2人のお客様が最後の1個を同時に購入しようとしたらどうなりますか?
→ 購入できるのは1人だけです。もう1人には数量超過のメッセージが表示され、注文は作成されません。システムは競合を防ぐ方法で数量を差し引いており、「全員を通して後で調整」するわけではありません。
Q5: セールをすぐに止めたい場合は?
→ その行の「ステータス」スイッチをオフにするか、終了日時を過去に変更します。行を削除しても止められますが、その場合は商品のプロモーション価格も外れます。
Q6: プラグインを新しいバージョンに更新すると、作成済みのセールは失われますか?
→ 失われません。再インストールでも更新でもデータはそのまま保持されます。テーブルが削除されるのは「Uninstall」の操作だけです。
Q7: タイムセールと顧客グループ別価格の両方がある商品では、お客様はどちらの価格を支払いますか?
→ 低い方の価格を支払います。タイムセール価格がベースで、グループ別価格はそれをさらに下げることしかできません。どちらの価格でも、お客様はセールの数量を1つ消費します。
Q8: マーケットプレイスで、ショップが自らタイムセールを作成できますか?
→ できません。作成画面はルート管理画面にあるため、セールはマーケットプレイスの管理者が作成します。
Q9: 特定のストアだけでプラグインを無効にできますか?
→ できません。プラグインの有効化 / 無効化はサイト全体に適用されます。ただし、セールを作成していないストアには何も表示されないため、実際には他のストアに影響はありません。
Q10: 実施中のセールがあるのに、トップページにタイムセール帯が表示されません。
→ プラグインはトップページに帯を自動で配置しません。位置はあなたが選びます。「レイアウトブロック」画面で front_home ページに product_flash_sale ブロックを追加したか、またはテンプレートに @include('Plugins/ProductFlashSale::blocks.product_flash_sale') の行があるかを確認してください。shop_product_promotion ブロックと混同しないようご注意ください。これはショップに元からあるプロモーションのブロックです。
📅 最終更新: 2026-10-22 · ✍️ 作成者 (Author): GP247
Ratings & reviews
Please sign in to write a review.
ログインNo reviews yet. Be the first to review this product.