アルファサード株式会社 代表取締役 野田 純生のブログ


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を使って書き換えてもいいけど、まぁ今回のはファイルを生成出来ればいいし「ステージングサーバーでのファイル生成用途」ってのが作ったきっかけなのですけど(どっちにしても「もっさり」してますが)。

でも、僕はむしろ「プレビュー」に活用したいですね。一時ファイルを作らないプレビュー、且つエントリー以外の例えばインデックスアーカイブもファイルを生成すること無くプレビューできるっての。

年末の宿題にしようかなぁ。既に宿題いっぱいだしなぁ...

カテゴリ


このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の代表取締役社長であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ