トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-plugin/111

ページの作成や編集にはユーザ登録が必要です。

categoryプラグインの一覧表示を階層表示にする

  • 投稿者: KG
  • カテゴリ: 修正
  • 優先度: 普通
  • 状態: 提案
  • 日時: 2004年05月02日 02時53分24秒

 内容

Ver3.5.3のcategoryプラグインを改良して階層表示できるようにしました。階層化は"/"区切りを前提としています。階層の表示方法は色々と改良する余地はあると思いますのでご意見をお聞かせください。

※バグがあるかもしれませんので注意してください。

 変更箇所

CategoryHandler.pm の do_action を以下のように変更します。

#==============================================================================
# アクションハンドラメソッド
#==============================================================================
sub do_action {
	my $self = shift;
	my $wiki = shift;
	my $cgi = $wiki->get_CGI;
	my $category  = $cgi->param("category");
	my $cachefile = $wiki->config('log_dir')."/category.cache";
	
	if(!(-e $cachefile)){
		&plugin::category::CategoryCache::create_cache($wiki);
	}
	my $result = &Util::load_config_hash(undef,$cachefile);
	
	if($category eq ""){
		$wiki->set_title("カテゴリの一覧");
	} else {
		$wiki->set_title("カテゴリ:".$category);
	}

	my $separator = "/";
	my $buf = "";
	my $okey = "";
	my $t = 0;
	my @btree = (); my $btree = 0;
	my @otree = (); my $otree = 0;
	my @tree  = (); my $tree  = 0;

	$btree = @btree = split(/$separator/,$category);

	foreach my $key (sort(keys(%$result))){
		$otree = @otree = split(/$separator/,$okey);
		$tree  = @tree  = split(/$separator/,$key);
		
		if ( $btree > 0 ) {
			for ( $t = 0; $t < $btree; $t++ ) {
				if ( $btree[$t] ne $tree[$t] ) { last; };
			}
			if ( $btree != $t ) { next; };
		}
		
		my $i = 0;
		while ( $otree > $i && $tree > $i && $otree[$i] eq $tree[$i] ) { $i++; };
		
		for ( $t = 0; $t < $otree - $i; $t++ ) { $buf .= "</ul>\n"; };
		
		for ( $t = $i; $t < $tree; $t++ ) {
			$buf .= "<h2>".&Util::escapeHTML($tree[$t])."</h2><ul>\n";
			if ( $t < $tree-1 ) { next; };
			my $nkey = $tree[0];
			for ( my $k = 1; $k < $t+1; $k++ ) { $nkey .= "/".$tree[$k]; };
			my @pages = sort(split(/\t/,$result->{$nkey}));
			my $sep = "";
			foreach my $pagename (@pages){
				$buf .= "<li><a href=\"".$wiki->config('script_name')."?page=".&Util::url_encode($pagename)."\">".
				        &Util::escapeHTML($pagename)."</a></li>\n";
			}
		}
		
		$okey = $key;
	}
	$otree = @otree = split(/$separator/,$okey);
	for ( my $t = 0; $t < $otree; $t++ ){
		$buf .= "</ul>\n";
	}
	return $buf;
}

 コメント

  • 子Wikiで使用する場合のページリンクがおかしかったのを修正しました。 - KG (2004年05月19日 22時07分23秒)
  • 元のCategoryHandler.pmにあった参照権限のないページを見せない部分入れて使っているのですが、変更内容はどこにだせばいいですかね? - ばけ (2004年10月25日 02時41分57秒)
  • お作法がわからないので、こういうのどう?っていうのをどこに書けば良いのかをお教えいただければと。 - ばけ (2004年10月25日 02時53分35秒)
  • 本当ですね。can_show($pagename)のチェックが抜けてましたね。変更箇所等はコメントの後にページ編集で直接diffの結果を貼り付けたり、ソースを添付したりするのが多そうです。 - KG (2004年10月25日 09時33分34秒)
  • ではdiffの結果を貼り付けておきます。 - ばけ (2004年10月25日 20時07分47秒)
お名前: コメント:
CategoryHandler.diff

最終更新時間:2004年10月25日 20時07分47秒