RebuildAt1stView(PHP版)。
公開日 : 2007-12-26 22:46:08
別にPHP版つくる必要性感じてないんですけど(MTには既にダイナミックパブリッシング用のキャッシュの仕組みが組み込まれていますし)、現状の使用だと.htaccessがぶつかるのでダイナミックとRebuildAt1stViewの共存が出来ない(ブログを分けるとかやりようはあるけど)ので何となく書いてみました。
何だか流行りみたいなので(<<お前だろ!)
当然ながらレンダリング結果はMTのPHPアーキテクチャを使ったものになります。
mtview.phpを上書きするテンプレート
<?php
include('<$MTCGIServerPath$>/php/mt.php');
$mt = new MT(<$MTBlogID$>, '<$MTConfigFile$>');
ob_start();
$mt->view();
$output = ob_get_contents();
ob_end_clean();
echo $output;
$url = $mt->request;
$pattern = '/¥/$/';
if ( preg_match($pattern, $url) ) {
$blog = $blog = $mt->db->fetch_blog(<$MTBlogID$>);
$url .= $mt->config('IndexBasename');
$url .= '.';
$url .= $blog['blog_file_extension'];
}
$data = $mt->resolve_url($url);
$info = $data['fileinfo'];
$file_path = $info['fileinfo_file_path'];
if ( ! file_exists($file_path) ) {
if (!($fh = fopen($file_path, 'w'))) {
return;
}
fwrite($fh, $output, 128000);
fclose($fh);
}
?>
おまけ
MT4で「真の」Perl版ダイナミック・パブリッシングを実現するよ(ただしM専)
このエントリーで私が示したかったのは、MT::WeblogPublisherに依存することなく、アーカイブのレンダリングとファイルの生成を「分離できること」である。改造版のMT::App::Viewerは、blog_idとURIだけを入力として受け取り、対象のアーカイブをオンメモリでレンダリングし、その結果をas isでブラウザに対して出力する。
「FileInfoを食べてレンダリング結果を返すメソッド」ってのがあれば確かに色んな実装が楽になりますね。Viewer.pmを使って書き換えてもいいけど、まぁ今回のはファイルを生成出来ればいいし「ステージングサーバーでのファイル生成用途」ってのが作ったきっかけなのですけど(どっちにしても「もっさり」してますが)。
でも、僕はむしろ「プレビュー」に活用したいですね。一時ファイルを作らないプレビュー、且つエントリー以外の例えばインデックスアーカイブもファイルを生成すること無くプレビューできるっての。
年末の宿題にしようかなぁ。既に宿題いっぱいだしなぁ...