Serene Bach とコンテントネゴシエーション

この Weblog のテンプレートは XHTML 1.1 で作ってるんだけど, メディアタイプは text/html として Web サーバから送出されている. これをブラウザの要求に応じて application/xhtml+xml として送出できんかいな, あわよくばそういうプラグインを作れんかいな, と これもまた前々から思っているところ.

ということで, 昨日に引き続き Serene Bach のモジュールを目で追っかけていった. 直接関係しそうなのは下記の 1 行ということを把握. 但し 「1 行」 とは言っても, これと同様の行が複数のモジュール, 複数のメソッドに記述されている.


return sb::Interface->get->head('type'=>'text/html') . $self->set_main($cms->output);

…凄いなコレ. テンプレートから生成された文書 (≒ メソッド sb::TemplateManager::output の戻り値 $cms はクラス sb::TemplateManager のオブジェクト.) が何であろうが関係なく 'text/html' だなんて. せっかくメディアタイプを指定できるように sb::Interface::head が実装されているのに これじゃ意味ねーじゃん.

オブジェクト指向的には, テンプレートのメディアタイプを判別して出力する sb::TemplateManager::get_type なるメソッドを追加すると良さげ. これをプラグイン追加の形で実現するのは簡単だろうけど, あちこちに散在している上記 1 行の修正もプラグイン追加の形で, つまり 1 行を書き換えるためだけにメソッドをオーバーライドする, てのは非現実的だなぁ.

また明け方になって就寝するのはマズいので今回はここまで. 近いうちに作業しようと思う.