【5.4.0】親フォルダの公開期間外で訪問者に表示されないページが、コンテンツ一覧では公開中のページと同じ「○」で表示される

何が起きるか

フォルダに公開期間を設定すると、その配下のページも公開期間に従って表示されなくなります(これは正しい動きです)。

ところが、コンテンツ一覧ではその配下のページが、本当に公開中のページと同じ見た目(白い行・公開状態「○」)で表示されます。

フォルダ「サービス」の公開期間の開始日を未来の日付(2026/12/01)にした状態で確認しました。

コンテンツ一覧での見え方 訪問者が開くと
フォルダ「サービス」 灰色の行(公開されていないことが分かる) 404
配下の「サービス1〜3」 白い行・「○」(公開中の「サンプル」と同じ) 404
公開中の「サンプル」(比較) 白い行・「○」 表示される

ツリー形式でも、フォルダは灰色、配下のページは白く表示されます。

親フォルダが「非公開」のときとの違い

親フォルダを「非公開」にしたときは、配下のページの公開状態の欄が「—」になり、一覧で区別できます。

ところが、親フォルダが「公開期間外」のときは「○」のままです。

つまり一覧は、親から引き継いだ非公開は示すのに、親から引き継いだ公開期間は示していない状態です。

なぜ問題か(どんな被害があるか)

運営者は、コンテンツ一覧の「○」と行の色で、ページが訪問者に見えているかを判断します。

  1. 見えていないページを、見えていると思い込む

公開予約(フォルダの公開開始を未来にする)や、期間限定の特集(フォルダの公開終了を設定する)で、配下のページは訪問者に見えていないのに、一覧では公開中と区別がつきません。

  1. 問い合わせを受けても原因にたどり着けない

「ページが表示されない」と言われて一覧を見ても「○」なので、運営者はページ自体の設定を疑います。原因が親フォルダの公開期間にあることは、一覧からは分かりません。

同じ一覧の中で、フォルダ自身は灰色にしているので、「公開期間外は灰色で示す」という考え方は製品の中にすでにあります。

ブログ記事一覧で、公開期間外の記事の背景が灰色にならない不具合(#2048)が修正されていることからも、一覧は実際の公開状態を映すべきものだと考えました。

再現手順

  1. 管理画面にログインする

  2. 配下にページがあるフォルダの編集画面を開く(初期データの「サービス」フォルダを使いました)

  3. 「公開期間」の開始日を未来の日付(例: 明日)にして保存する

  4. 公開サイトで、フォルダ配下のページ(/service/service1)が 404 になることを確認する(これは正しい動き)

  5. コンテンツ一覧(表形式、またはツリー形式でフォルダを開く)を見る

  6. フォルダ「サービス」の行は灰色だが、配下の「サービス1〜3」は白い行で、公開状態が「○」になっていることを確認する

(比較)同じフォルダの公開期間を戻して「非公開」にすると、配下のページの公開状態は「—」になります。

期待する動き

親フォルダの公開期間によって訪問者に表示されないページは、一覧でもそれが分かるようにしてほしいです(灰色の行にする、公開状態を「—」にする、または「親フォルダの公開期間により非公開」と示す、など)。

環境

  • baserCMS 5.4.0(公式の docker-compose で起動し、インストーラーで初期データ BcThemeSample を入れた状態)

  • PHP 8.5.7 / MySQL 8.0

補足(原因と思われる箇所)

コンテンツ一覧の行(index_row_table.php)は、BcContentsHelper::isAllowPublish($content, true) で公開かどうかを判定しています。

第 2 引数が true のため、そのページ自身の設定(self_status / self_publish_begin / self_publish_end)だけを見ています。

親フォルダから引き継いだ公開期間は publish_begin / publish_end に入っていますが、判定には使われていません。

既存の Issue を検索しましたが、同じ内容は見当たりませんでした。

@ican.lab
別スレにてコメントした者です。こちらもissue立ててみました。