……を、ずーっと考えてた。
結論、算術演算で何とかなる。
このblogが利用しているblogホスティングサービス、Seesaaブログでは、かなり柔軟なカスタマイズが可能となっている。どれくらいかというと、HTMLを丸ごと書き換える事さえ出来るぐらいだ。
HTMLを書き換える際には、その中にSeesaaブログ独自のタグを埋め込む事になる。『ここにタイトルを入れる』『ここに記事を列挙する』といった指定をするのに。一種のDSLだ。
条件分岐をさせようとした場合、Seesaaブログの独自タグでは次のように書く。
<% if:EXPRESSION %>
<!-- ここにEXPRESSIONが真の時の内容を記述する -->
<% /if %>
例えば、次のように書く。
<% if:page_name eq 'index' %>
<p>このパラグラフは、blogのトップページでのみ出力される</p>
<% /if %>
ところが、EXPRESSIONには、複数の条件をAND/OR下ものを書く事が出来ない。例えば、次のような記述は許可されない(そして、パース処理がエラーを吐く為か、何も表示されない)。
<% if:page_name eq 'index' & page_name eq 'archive' %>
<p>トップページか、過去ログのページで表示させたい。</p>
<p>……が、上手くいかない。</p>
<% /if %>
<% if:page_name eq 'index' and page_name eq 'archive' %>
<p>"and"と書いてもダメ。</p>
<% /if %>
<% if:((page_name eq 'index') and (page_name eq 'archive')) %>
<p>括弧で囲ってもどうにもならない。</p>
<% /if %>
……さてどうしよう?
実は、独自タグ内では算術演算が可能だ。何処まで可能なのか、ハッキリと調べた訳ではないが、加算(+);、減算(-)、乗算(*)が可能なのは確認した。
後は、その特性を利用して、次のように書ける事が分かる。
<!-- 論理和(or) -->
<% if:((page_name eq 'index') + (page_name eq 'archive')) %>
<!-- snip -->
<% /if %>
<!-- 論理積(or) -->
<% if:((page_name eq 'archive') * (archive_page_name ne 'mday')) %>
<!-- snip -->
<% /if %>
否定(not)はちょっと思いつかない。page_name eq 'index'
→page_name ne 'index'
のような、条件を逆にする手法ぐらいだろうか。
ラベル:seesaaブログ