category_title plugin

カテゴリ単位での閲覧の時に、title要素やh2要素にそのカテゴリの名前を潜り込ませることが出来るように、category_titleというプラグインを作りました。月単位での閲覧の時は、list_title_at_monthで実装してるので、カテゴリ単位での閲覧の時にも実装しないのは片手落ちかなとか突然思い至ったので。

blosxomカテゴリにアクセスすると、title要素やh2要素にblosxomという文字列が追加されてるのを見て

ソースは短いので直接書いてみる。

package category_title;

use strict;
use vars qw($title);

sub start {
	if (!$blosxom::path_info or $blosxom::path_info_yr or ($blosxom::path_info =~ m|.*?/?\w+\.\w+$|)) {
		return 0;
	}

	return 1;
}

sub head {
	$title = " - $blosxom::path_info";

	return 1;
}

1;

flavourに書くのは$category_title::titleになります。仕組みは、start$blosxom::path_infoあたりをチェックし、カテゴリ単位での閲覧である場合はプラグインを実行してやり、$titleという変数に$blosxom::path_infoをぶち込んでやると。if文は3つの条件で判断しています。最初の条件は「$blosxom::path_infoがあるかどうか」で、これによってトップ・ページにアクセスした場合を弾きます。2番目の条件は「$blosxom::path_info_yrがあるかどうか」で、これによって年・月・日単位での閲覧の場合を弾きます。最後の条件は「$blosxom::path_infoにピリオドが含まれているかどうか」で、これによってエントリ単位での閲覧(このサイトの場合はPramanent linkに使用している)を弾きます。最後の条件がかなり適当なので、ピリオドのあるカテゴリを作ってたりすると、そのカテゴリでは表示されないとか言う不具合がありますが、気にしない。

このサイトではまだサブカテゴリを使ってないので、これだけにしてありますが、サブカテゴリの区切り文字を任意のものに変えたい場合は、headを、

sub head {
	my $sep = "区切りに使う任意の文字列";
	$title = "$blosxom::path_info";
	$title =~ s!/!$sep!g;
	$title = $sep . $title;

	return 1;
}

こんな感じでいいと思います。試してないので知りませんが(ぉ。