RebuildAt1stView(PHP版)。

| コメント(0) | トラックバック(0)

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

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

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

トラックバック(0)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/140

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2007年12月26日 22:46に書いたブログ記事です。

ひとつ前のブログ記事は「再構築なんてこわくない(2)!」です。

次のブログ記事は「再構築なんてこわくない(3)!」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6