ホーム >> 左脳Script >> Movable Type >> 小技 >> プレビュー状態かどうかを知るには

プレビュー状態かどうかを知るには


最近 アクセス解析に「ブログ記事プレビュー」の履歴が残る事に気付きました(遅すぐる)。
一旦公開したけれど、直後に題名を変えた記事が有ったのですが、題名を変える前のページへのアクセスがありえないほどカウントされていて・・・

「公開していない記事にこのヒット数はありえない。新手のハッキングか?!」と戦々恐々だった 訳ですが、
該当ページのurlをみると「mt-preview-**********************」というオチでした。

検索ちゃん!

「プレビューの時だけアクセス解析スクリプトを外せないかなぁ。」と、調査開始。

「mt プレビュー」で検索しても、タグがあるとか、変数があるとか、そんな情報にヒットしません。
一般的な機能として実装されていないようです。

じゃ、誰かプラグイン作ってたりしないかな?と、探したのですが・・・
私の探し方がマズイのか、プレビュー状態の判別をするようなプラグインが見つかりませんでした。


自力で作るしかにぃのか?!


そして解析へ

「mt プレビュー」でヒットしたページに 「MovableTypeのプレビュー機能を改良するStylePreviewプラグイン(改良)。」という記事を見つけていたので、ここで公開されている「プレビューをファイルに書き出さずに閲覧可能にするプラグイン StylePreview 」のコードを足がかりに、Movable Type のコードの解析を始めました。

また、同サイトの別エントリーも幾つか参考にさせて頂きました。


解析の対象は、Movable Type バージョン 4.25 です。

  • MTディレクトリ\lib\MT\App\CMS.pm
    2774行目preview_object_basename
    プレビュー時のテンポラリファイル名を作るルーチン。らしきもの。

    2976行目remove_preview_file
    プレビューテンポラリファイルの削除ルーチン。らしきもの。

  • MTディレクトリ\lib\MT\CMS\Entry.pm
    827行目preview
    エントリー(記事全て?)のプレビュー表示動作のルーチンっぽいもの。

    同ルーチン958行目に以下のような、記事生成コードらしき物を発見。

    以下、引用
    
        my $ctx = $tmpl->context;
        $ctx->stash( 'entry', $entry );
        $ctx->stash( 'blog',  $blog );
        $ctx->stash( 'category', $cat ) if $cat;
        $ctx->{current_timestamp} = $ts;
        $ctx->var('entry_template',    1);
        $ctx->var('archive_template',  1);
        $ctx->var('entry_template',    1);
        $ctx->var('feedback_template', 1);
        $ctx->var('archive_class',     'entry-archive');
        $ctx->var('preview_template',  1);
        my $html = $tmpl->output;
    

    $ctx->var で変数を設定しているようです。文字列も<mt:if> で参照できる物ばかり。
    しかし、ドキュメントにない物もあります。preview_template なんて、いかにもプレビュー時の フラグっぽい名前ではありませんか。

試しに、以下のような記事で実験してみました。


<mt:if name="preview_template">
プレビュー画面
<mt:else>
公開状態
</mt:if>

記事の公開状態に関わらず、プレビューの時だけきちんと判別できました。
どうやら、まさに求めていた物のようです。

動作確認をした Movable Type はバージョンは4.25です。
ただし、ドキュメントに無いことなので、今後変更される可能性もあります。
変更されないよう、この「preview_template」を一般的に広めてしまえばあるいは・・・(笑)


オチは?

実は、これを見つけた後に、エントリーの公開状態を示すパラメータがあること気付いたのでした。
<mt:if>で entry_status の値を調べると公開状態を知る事が出来るようですね。
しかし、バージョンによって値が異なる場合があるとの事。

更に検索で、こんな物があったなんて・・・オレは今まで一体ナニを。
<$MTEntryStatus$>

しかし、ここで考え直す。
「記事の公開状態に関わらず、プレビュー画面は表示できる訳で、公開中の記事の手直しでプレビューする事もあるよね?」


と言うわけで、公開状態に関わらず、プレビュー状態かどうかを知る方法は、今回見つけた preview_template を調べるしか無さそうです。

プラグインを作る事にならずに済んで、めでたしめでたし(ぉ


これで、アクセス解析のヒット数の殆どが「実は自分だった」という事態を回避できるようになりました。


追伸というか、この記事の方法を実践しようとしているみなさんへ

もし、上記で紹介した「StylePreview 」を使っている方がいらっしゃいましたら、注意して下さい。StylePreview は、preview_template を設定しないようなので、今回の記事の方法ではプレビュー状態を判定できません。

プラグイン本体 StylePreview.pl の、109行目付近にあるコードで、 「my $build = MT::Builder->new;」というコードの前に、「$ctx->var('preview_template', 1);」を追加すると上手くいくと思います。
あくまでコード見ただけでの判断で、こちらで確認していませんので自己責任でお願いします。



トラックバック(0)

トラックバックURL: http://n-yagi.0r2.net/sanoupulurun/mt-tb.cgi/171

コメントする

ホーム >> 左脳Script >> Movable Type >> 小技 >> プレビュー状態かどうかを知るには

アーカイブ

このブログ記事について

このページは、n-yagiが2009年6月20日 19:54に書いたブログ記事です。

ひとつ前のブログ記事は「エレメントの座標取得 ~スクロール要素~」です。

次のブログ記事は「Google日本とGoogle日本語の違い」です。

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

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。