Weblog

BPT #1: エントリごとのページの閲覧かどうかを判定する方法

Posted at 2004-08-24T15:37:00+09:00 in Blosxom

blosxomのプラグインを作成する時に、エントリごとのページを閲覧している場合のみに動かしたいと考えることは良くあると思います。僕の作った物の中では、one_year_agoなんかがそうですね。その判定はどうやるのかということですよ。

プラグインの挙動にもよりますが、大抵の場合はstartサブルーチンで、$blosxom::path_infoをチェックすることによって判定することになると思います。$blosxom::path_infoにはエントリごとのページを閲覧している場合、

foo/bar.html

というようなものになるので、

sub start {
  if ($blosxom::path_info !~ /\./) {
    return 0;
  }

  return 1;
}

一番単純に考えると、こんな感じでしょう。$blosxom::path_infoにピリオド(.)が含まれるかどうかをチェックしており、含まれなかった場合は0を返し、プラグインを停止させています。コレは単純明快で良いのですが、場合によっては不具合があります。具体的な例を挙げると、「.を含むディレクトリでカテゴリを掘っている場合」です。例えば、

$datadir/programming/ms.net

などという、Microsoft .NET関連のエントリを格納するカテゴリとして、ディレクトリを掘ったとすると、このカテゴリごとのページを閲覧している場合でも$blosxom::path_infoにピリオド(.)が含まれることになります。

programming/ms.net

などとなり、一見してエントリごとのページを閲覧している場合と判別できません。この判定には.$blosxom::flavourで終わるかどうかというチェックが必要になります。

また、$blosxom::path_info$ENV{PATH_INFO}をちょっと加工したものなので、この両者は似て非なるものです。その違いはindex.htmlなどは含まれないことや最初と最後のスラッシュ(/)が削除されることなどで、そのあたりのチェックは無用だったりします。

以上を踏まえると、エントリごとのページを閲覧している場合かどうかを判定するコードは、

sub start {
  if ($blosxom::path_info !~ /\.$blosxom::flavour$/) {
    return 0;
  }

  return 1;
}

となると思います。これでも万能ではなく、いろいろ考えるとメンドウなので、最初に書いたコードでも良いかも知れません。

おもむろに連載物になりそうなものを始めてみる。BPTは「blosxom plugin tips」の頭字語。「#1」とか付けたので、引っ込みがつかなさそうな気がするけど、流れが速いので書かなければバレナイ気がする。経験則100%で書いているので、ツッコミは大歓迎です。

Recent entries from same category

同じカテゴリに分類された最近10件のエントリです。

  1. 不明なflavour回避パッチの問題点
  2. 使用しているプラグイン
  3. はてなブックマークでつけられたコメントをblosxomにインクルード
  4. blosxomサイトの日本語訳
  5. interpolate_fancyプラグインの使い方
  6. blosxom plugin: ufyu
  7. SourceForge.netで開発されているblosxomはv2.0.2に
  8. push_if_first plugin
  9. paging plugin更新 #8
  10. エントリの日付と時刻をW3CDTFで

Comments

JavaScriptに対応または有効な環境の場合、ここにはてなブックマークでのこのエントリに対するコメントが表示されます。

Weblog archives

by Category

This page was last modified on 2004-08-25T12:58:48+09:00 (in 0.228 secs).