Blosxomで記事ごとに専用のCSSを当てる方法を考えていた。last()rel="stylesheet"を削除してCSSの参照を追加するだけのプラグインを作るのも良いけど、やることのわりにコストが高い。単純にmetaプラグインとinterpolate_fancyプラグインを組み合わせて実現するのが手っ取り早そう。

記事ファイルでは特別なCSSを使うかどうかのフラグのみ書く。

パーマリンクに特別なCSSを追加
meta-special_css: 1

<p>...</p>

フレーバーでは以下のようにして、$meta::special_cssを使った分岐を利用する。CSSファイルのパスは記事ファイル名を利用することでユニークさを保証できる。

<?$meta::special_css eq="1">
  <link rel="stylesheet" href="/styles$path/$fn.css">
</?>
<?$meta::special_css ne="1">
  <link rel="stylesheet" href="/styles/style.css">
</?>

まだ採用はしてない。


常に記事ファイル名を利用したCSSファイルのパスを参照するようにしておいて、mod_rewriteでそのパスが見つからなかった場合にデフォルトのCSSにフォールバックさせる方がもっと手っ取り早い感じする。普通にURL書き換えしちゃうとキャッシュが効かなくなるけど、302での外部リダイレクトにすれば良さそう。

<IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteBase /styles/

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ style.css [L,R=302]
</IfModule>

こういう実装だとBlosxomに依存しないので、CSSファイルのパスをユニークにする仕組みさえ用意できれば、様々なCMSで実現できる。