bluditでブログをひとつ下の階層に分けたいとき

今、bluditのテーマを作っています。
bluditのサイト構成は、トップページがあって、その下に各記事がぶら下がるのが通常構成です。例外はタグとカテゴリでこれは(設定を変更しなければ)tagとcategoryの下に記事がぶら下がります。こんな感じです。
トップページ
│ └ ブログ各記事
├ /category/
│ └ カテゴリ別の記事
└ /tag/
└ タグ別の記事
ですが、下のようにblogだけを独立した階層にしたい場合があります。たとえば、企業ページで随時更新するニュースをblogに割り当てたい場合などです。
トップページ
├ /blog/
│ └ ブログ各記事
├ /category/
│ └ カテゴリ別の記事
└ /tag/
└ タグ別の記事
bluditの[設定] >[ 一般]にある「高度な設定」から特定のページをトップページに割り当てられるので静的ページをトップページに指定すれば、この形は簡単にできます。しかし、問題はトップページが通常ページになってしまうことです。
これをどうやったら分けられるのか考えていましたが、答えはものすごく簡単。テーマ内のホームとページのファイル読み込みの判定をするときに合わせてスラッグ名も判定して切り替えればOKです。(残念ですが設定だけではできません)
2022/03/07追記
固定したホームページのphpファイル切り替えですが、こちらの「bluditでページのテンプレートを差し替える」の記事の方法でもphpファイル(テンプレート)を差し替えられます。どちらもindex.phpの処理が必要なので手間は変わりませんが、ページによって差し替えたいファイルが複数ある場合などはリンク先の方法を使うと楽になります。
逆に利用者が別にいて管理パネルからphpファイルを変更されたくない場合は、この記事で紹介している方法を使うとよいでしょう。
テーマで自分が今、どこのページを見ているか調べるには変数$WHERE_AM_I
を使います。
$WHERE_AM_I
は、トップページを見ているときは「home」、通常ページを見ているときは「page」を返すので、いつもはこれでデザイン(PHPファイル)の振り分けます。ですが、トップページにページを割り当てると両方とも「page」が返ってきます(このとき、割り当てられたblogにアクセスすると「blog」が返ってきます)。
トップページも通常ページもどちらも「page」なので困ってましたが、$page->slug()
でスラッグ名も調べられるので、スラッグ名「home」をトップページにしたなら、$WHERE_AM_I
がpage
で$page->slug()
がhome
だったらトップページのファイルを読み込めばいいということです。こんな感じです。
if ($WHERE_AM_I == 'blog'):
include(THEME_DIR_PHP.'blog.php');
elseif($WHERE_AM_I == 'page' && $page->slug() != 'home'):
include(THEME_DIR_PHP.'page.php');
else:
include(THEME_DIR_PHP.'home.php');
endif;
解決すれば拍子抜けだけど、頭の中で「調べるのは$WHERE_AM_I
」で固まってたので気がつくのに時間がかかってしまった。
ちなみに、通常ページ、固定ページ、静的ページなどのページの属性は、$page->type()
で調べられるので、厳密に調べるなら合わせてチェックするといいと思います。