Skip to content

SC-017 機種差枚3ヶ月ランキングショートコード ​

概要 ​

  • 指定ホール・対象月の機種別累計差枚ランキングを、当月・先月・先々月の3列で静的テーブル表示する。
  • 合計機種差枚ランキングと平均機種差枚ランキングをタブで切り替えて、同時に1つだけ表示する。
  • 記事内の縦の占有領域を抑えるため、既定は上位5位 +「...」+ 下位5位 + 新台グループに圧縮し、全順位はモーダルで表示する。
  • hall(ホール名)・target_month(対象月 YYYY-MM)を属性で受け取り、KishuSamai3MonthsRankingConverter でバリデーション・DTO 変換後、KishuSamai3MonthsRankingController → KishuSamai3MonthsRankingService 経由でデータを取得、View で HTML にレンダリングする。
  • 有料記事固定セクション #5(機種差枚数ランキング)で利用する。

ワイヤーフレーム ​

ブロック一覧 ​

ブロックIDブロック名表示内容初期値ユーザー操作アクション
B-0合計/平均タブ「合計」「平均」のタブトリガー「合計」が選択状態タブをクリック対応パネルへ切り替え
B-1ランキングパネル見出し(ホールアイコン + ランキング名)と圧縮テーブル当月データがあるときなし-
B-2すべて表示ボタン選択中タブの全機種数を添えたボタン圧縮表示のときのみボタンをクリック全順位モーダルを開く
B-3全順位モーダル選択中タブの全順位テーブル(省略なし)非表示(圧縮時のみ出力)閉じる操作閉じるボタン / 背景 / Escape

表示条件・注記 ​

  • 属性: hall / target_month 必須。
  • 見出し: ホールアイコンを見出しに統合し、🏝️合計機種差枚ランキング / 🏝️平均機種差枚ランキング とする(ホール名は aria-label でタブリストに付与)。
  • 行数: 上位 5 +「...」+ 下位 5 +「新台」グループ。省略行を挟んでも行数が減らない 11 行以下、および新台グループを足すと全行より長くなる場合は全行表示。欠損月は「—」。当月・先月・先々月とも上がり/下がり色分け。
  • 新台: 対象月に導入された機種(db_new_machine_info.release_date が対象月内かつ kishu_id 紐付け済み)。該当行の機種名の前に 新台 バッジを付ける(長い機種名の省略記号でバッジが隠れないようにするため機種名より前に置く)。上位 5 / 下位 5 に既に出ている新台はバッジのみで、新台グループには重複表示しない。
  • タブ: core_src/View/templates/packages/Tabs/tabs.js の BEM 版マークアップ(.tabs__trigger / .tabs__panel)を利用する。パネルの表示制御 CSS は SC-017 のブロック配下で定義する。非アクティブパネルは CSS で display: none にするため、タブの切り替えと全順位モーダルは JS が動く前提とする(有料記事では両アセットをサーバー側で enqueue する)。
  • モーダル: 共通 .data-detail-modal シェルを利用し、非表示の全順位テーブルを複製して表示する。圧縮表示にならないタブでは「すべて表示」ボタンと複製元テーブル・モーダルを出力しない。
  • 0 件: no-data メッセージ。
  • 実装参照: Twig core_src/View/templates/kishu_samai_3months_ranking/kishu_samai_3months_ranking.twig(パネルは _panel.twig、テーブルは _table.twig)。JS kishu-samai-3months-ranking-modal.js。mockup mockups/KishuSamai3MonthsRankingWireframe/。

外部インターフェース ​

ショートコードタグ ​

  • タグ名: [kishu_samai_3months_ranking]
  • 入力例: [kishu_samai_3months_ranking hall="アイランド秋葉原" target_month="2026-06"]

属性一覧 ​

属性役割必須
hall対象ホール名(HallEnum 対応)○
target_month対象月(YYYY-MM 形式)○

表示仕様 ​

項目内容
テーブル数合計機種差枚ランキング / 平均機種差枚ランキング(タブで切り替え、同時に1つだけ表示)
カラム順位 / 機種名 / 当月差枚 / 先月差枚 / 先々月差枚
ランキング順当月の合計差枚(合計テーブル)/ 当月の平均差枚(平均テーブル)降順
行数上位5行 + 省略行「...」 + 下位5行 + 新台グループ(圧縮しても行数が減らないときは全行表示)
新台グループ下位5行の下に「新台」見出し行を挟み、対象月導入で上位・下位に未登場の機種を順位昇順で並べる
全順位表示圧縮表示のタブにのみ「すべて表示」ボタンを出し、省略なしの全順位をモーダル表示
行の母集団当月データがある機種のみ(先月・先々月のみ存在する機種は行に含めない)
データ欠損当該月に機種データがない場合は「—」

エラー ​

条件ユーザー向け挙動メッセージ / ログ
hall 未指定または不正値ErrorHandler の返す文言ValidationException(HallEnum 照合失敗)
target_month 未指定または空ErrorHandler の返す文言ValidationException(KishuSamai3MonthsRankingMessages::TARGET_MONTH_REQUIRED)
target_month 形式不正ErrorHandler の返す文言ValidationException(KishuSamai3MonthsRankingMessages::TARGET_MONTH_INVALID)
該当データなし段落テキストKishuSamai3MonthsRankingMessages::NO_DATA
コントローラー・サービスの \ExceptionErrorHandler の返す文言ErrorHandler::handle_error() 経由

更新不可とみなすもの(git管理外の内容に依存し、リポジトリだけでは追従できない依存) ​

  • ショートコード名 kishu_samai_3months_ranking を変更しない
    • 理由: 有料記事本文にショートコードタグが自動生成・直書きされるため
  • 属性名 hall / target_month を変更しない
    • 理由: 有料記事テンプレート生成が属性名に依存するため