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

BugTrack-plugin/153

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

多階層カテゴリプラグイン(カテゴリ登録・リスト表示・追加削除補助プラグインのセット)

  • 投稿者: やな
  • カテゴリ: 新規
  • 優先度: 普通
  • 状態: 提案
  • 日時: 2004年10月26日 23時05分18秒

 内容

多階層管理のできるプラグインを作成しました。

大量にページが存在する場合には、細かい管理がしにくかったので、categoryプラグインを拡張し、その他のカテゴリ関連のプラグインを参考に、多階層管理出来るプラグインを作成しました。既存のプラグインを作成された方、ありがとう御座います。ライセンスはGPL、3.5.6で確認済みです。

サンプルページはこちらです。

主な機能は以下の通りです。

  • 階層付きのカテゴリ管理が出来る。
  • 既存カテゴリへの登録・解除、そして、表示非表示オプションの変更が、容易に出来る。
  • カテゴリリストが、整形された階層つきリストとして表示できる。
  • カテゴリリストに表示されるページのタイトルを自由に設定できる。
  • カテゴライズされていないページを表示できる。
  • (カテゴリとその属するページへ移動する為のナビゲーションリストが表示できる)必要ないように実装しなおしましたので、開発はしません。

このプラグインは全部で4(5)つのプラグインで構成されています。

category2
ページに、そのページが属するカテゴリを記述します。
category2title
ページに記述し、カテゴリリストに表示されるページ名を指定します。
category2list
カテゴリを指定し、そのカテゴリ以下の、ページとカテゴリを、階層付きで整形したリストとして表示します。
category2belong
ヘッダ・フッタや、ページの末尾に記述し、表示中のページの登録カテゴリを追加・削除・更新する機能を提供します。
category2nav
(開発段階)ナビゲーション用ドロップダウンリストを表示します。必要ないように実装しなおしましたので、開発はしません。

 インストール

添付ファイルCategory2.zipを解凍し、展開されたcategory2フォルダをpluginフォルダへコピーし、プラグイン設定で有効にしてください。

開発段階ですが、category2navを利用したい方は、Category2v2b.zipを、上記と同様にインストールしてください。必要ないように実装しなおしましたので、開発は致しません。

 使い方

category2

多階層のページのカテゴリを設定します。

{{category2 カテゴリ名1,カテゴリ名2,...}}

1ページに複数のカテゴリを設定することもできます。

{{category2 カテゴリ名1-1,カテゴリ名1-2,...}}
{{category2 カテゴリ名2-1,カテゴリ名2-2,...}}

category2プラグインを記述した位置には

[カテゴリ:カテゴリ名1>カテゴリ名2>...]

という形式のアンカが出力され、押下するとそのカテゴリに属しているページの一覧が表示されます。nolinkオプションをつけることでカテゴリ定義だけを行い、アンカを出力しないようにすることもできます。

{{category カテゴリ名1,カテゴリ名2,...,nolink}}

カテゴリ名に半角のカンマは使用できません。

category2list

指定されたカテゴリのリストを階層表示します。

{{category2list カテゴリ名1,カテゴリ名2,...,option}}

カテゴリ名を省略すると、全てのカテゴリを表示します。nocategoryオプションを設定すると、カテゴライズされていないページのリストを表示します。no_nocategoryオプションを設定すると、カテゴライズされていないページ以外の全てのカテゴリを表示します。オプションの記述方法を変更しました。

オプションは以下のものを、|で区切って指定して下さい。

expand
子階層を展開して表示します
noparent
親階層表示行を出力しません
v
親階層を縦方向に表示します。(メニューに記述するときなど)
nocategory
全カテゴリリストへ、「カテゴリなし」を追加します。
onlynocategory
カテゴライズされていないページ一覧を出力します。
{{category2list}}
{{category2list nocategory}}
{{category2list expand}}
{{category2list カテゴリ1,expand|v}}
{{category2list カテゴリ1,カテゴリ1-2,v}}

存在しないカテゴリを指定すると、エラーになります。

カテゴリには、そのカテゴリに属する、カテゴリとページを、独立したページに表示するアンカが付加されます。ページには、そのページを表示するアンカが付加されます。

表示例:

[カテゴリ1] > [カテゴリ1-1] >

  • ページ1-1-a
  • ページ1-1-b
  • [カテゴリ1-1-1]
    • ページ1-1-1-a
    • ページ1-1-1-b
  • [カテゴリ1-1-2]
    • [カテゴリ1-1-2-1]
      • ページ1-1-2-1-a
      • ページ1-1-2-1-b

ココより下のものは、単なるオプション機能でしかありませんので、上の二つで十分多階層管理が可能です

category2title

多階層のページのカテゴリリストに表示するページのタイトルを設定します。

{{category2title タイトル}}

1ページに複数のタイトルを設定すると、一番最後に設定されたタイトルが適用されます。

category2belong

表示ページを既存カテゴリへ登録・削除する機能を提供します。

{{category2belong}}

以下のものが表示されます。参照権限・編集権限のない場合は何も表示されません。

  1. カテゴリ名が表示されたドロップダウンリスト
  2. nolinkオプション用チェックボックス
  3. 登録ボタン
  4. 削除ボタン
  5. 新規ボタン
  6. 更新ボタン
ドロップダウンリスト

ドロップダウンリストに既存のカテゴリが階層表示されます。アスタリスク(*)の付いたものは、現在表示中のページが登録されているカテゴリを現します。例えば、

{{category2 カテゴリ1,カテゴリ1-1}}
{{category2 カテゴリ3}}

と、ページに記述したとすると、ドロップダウンリストには以下のように表示されます。

カテゴリ1
 └カテゴリ1-1*
  └カテゴリ1-1-1
 └カテゴリ1-2
カテゴリ3*
登録ボタン

現在選択中のリストに、nolinkオプションを含めて、登録されます。

削除ボタン
選択中のカテゴリから、削除します。
新規ボタン
リストで選択されているカテゴリの下に、テキストエリアに入力されたカテゴリを作成し、現在のページを登録します。
更新ボタン
category2titleのタイトルを、設定・更新します。

categoy2nav

必要のないように実装しなおしましたので、開発は致しません。(開発段階)各カテゴリ・ページへのナビゲーションを容易にします。表示されたアイテムを選択し、移動ボタンを押下すると、カテゴリの場合には、そのカテゴリの一覧表示ページへ、ページの場合には、そのページへ移動します。

{{category2nav}}
{{category2nav own}}
{{category2nav nopage}}
{{category2nav own,nopage}}

オプションは、独立・順不同で使用できます。

  • own : 自分の属するカテゴリのみを表示します。
  • nopage : ページを表示しません(カテゴリ名のみ表示)。

以下は、wishlistです。

  • サイドバーへの対応
  • 自分の属するカテゴリの子カテゴリのみを表示

 コメント

  • サンプルページはこちらです。
  • まだサンプルを見ただけですが・・・、いいじゃないですか。上位階層へのリンクと、下位階層へのリンクを完全に分けて表示する、という手があったのですね(是非、組み込みます)。私的にはこれを、「できれば左のサイドバーで表示させたい」というのが希望なのですが(単に表示させるだけじゃレイアウトが崩れてしまいますよね)、何か名案がありますか? - あき (2004年10月27日 08時43分34秒)
  • 組み込みました。今表示しているページのカテゴリが何であるか、を見て表示を調節してれるわけではないのですね。敢えて引数にカテゴリ名を入れなくても、自動的に今表示しているページの上・下位カテゴリを表示してくれるなら、使い勝手は数倍になると思うのですが・・・。 - あき (2004年10月27日 09時04分23秒)
  • そうですね。ただ、登録されているカテゴリのみを表示すると、それ以外のカテゴリに追加できなくなってしまうので、、、。ということで、ナビゲーション用のプラグインを創ってみます。categroy2navかなんかで。これに、移動ボタンをつけてカテゴリ表示に一発ジャンプできるようにして、サイドバーに表示すれば、あきサンの思うとおりになるのでは? - やな (2004年10月27日 09時13分44秒)
  • すみません。「それ以外のカテゴリに追加できなくなってしまう」の辺りがよく分かりません。「ジャンプできない」の誤りなのか「複数カテゴリに属するページ」のことなのか、「表示させたくないカテゴリがある場合」のことを言っているのか・・・。すみません、理解力が無くて・・・。 - あき (2004年10月27日 09時42分19秒)
  • ただ、私も「サイドバーに表示」にこだわりすぎていたことに気が付きました。「ヘッダ(Header)に表示させる」という方向で考えることもできますし、サイドバー(Menu)との複合で実現するという方法もあります。もう少し考えてみます。 - あき (2004年10月27日 09時42分33秒)
  • ざっと、ナビゲーションプラグインを創ってみました。サイドバーにはちょっとつらいのが多階層(幅が必要になるもの)の弱点ですね。あきさんのアイディアを借りて、自分の属するカテゴリ・ページだけを表示する機能も付けてみました。サンプルページのフッタで確認できます。操作方法はみたまんまです。
    • インストールはcategory2v2b.zipを上書きで展開するか、Category2Nav.pmをcategory2フォルダへコピーして、Install.pmに
$wiki->add_paragraph_plugin("category2nav","plugin::category2::Category2Nav","HTML");
$wiki->add_handler("CATEGORY2NAV","plugin::category2::Category2Nav");
    • と記述してください。
    • 使い方は、
{{category2nav}}
{{category2nav own}}
{{category2nav nopage}}
{{category2nav own,nopage}}
    • のようにしてください。ownは、自分の属するカテゴリのみ、nopageは、カテゴリのみを表示します。
    • ベータ版なので、ソースはぐちゃぐちゃです。操作性はかなり上がったと思いますが。category2listプラグインにも、このような機能を付けたほうがいいのでしょうかね。ご意見をお聞かせ下さい。- やな (2004年10月27日 16時47分14秒)
  • あきさん、カテゴリ追加変更補助機能のドロップダウンリストのことだと勘違いしていました。これを除けば、あまり目新しいこともしてないものですから、、。上記のような、リストで一覧でき、カテゴリ・ページにジャンプできるものを作ってみたのですが、こういうことでしたか?? - やな (2004年10月27日 17時12分59秒)
  • さっそくの対応ありがとうございます。ですが、プルダウンリストのことではありませんでした。関連性の無いページへのジャンプは考えてません(リストに出なくて可)。後、今表示しているページに関連したリストが出るのが理想です。 - あき (2004年10月27日 20時38分11秒)
  • 私の方でも多階層カテゴリプラグインの仕様を参考に、開閉式リンクツリー表示プラグイン改良中?です。 - あき (2004年10月27日 20時54分47秒)
  • 作成しました。ページリンク階層表示プラグインです。 - あき (2004年10月28日 21時10分11秒)
  • 拝見しました。コメントは。そちらに残させていただきます。 - やな (2004年10月28日 23時16分54秒)
  • 細かなバグを改良しました。
    • カテゴリリンクにスペース(半角・全角)が含まれている場合に、リンクがおかしくなるのを修正した。
    • メニュー表示へ対応できるようにした。
      • リストの要素に id を振り、さらに全体を id 付きの div 要素で囲んだ。(サンプルページでは以下のように設定しています)
ul#category2file, ul#category2folder{
  line-height  : 110%;
}
li#category2file, li#category2folder{
  margin-top : 3px;
  margin-bottom : 3px;
  line-height  : 110%;
}
li#category2file{
  list-style-image : url(./plugin/category2/file.gif);
}
li#category2folder{
  list-style-image : url(./plugin/category2/folder_close.gif);
}
div#category2{
}
      • 親階層を縦方向に表示できるようにした。
    • カテゴリリンクをクリックした際に、デフォルトで、そのカテゴリに属するページと、一階層下の子カテゴリのみを表示するようにし、Windowsのエクスプローラのような操作が出来るようにした。このことにより、category2navの開発を中止した。
    • オプションで、細かく表示の指定が出来るようにした。
    • 階層が深い分、カテゴリ名の記述が面倒になるので、カテゴリの登録・削除・変更、タイトルの変更を、フォームを使って用意に出来るようにした。
  • 最新版category2v3.zip(722)を添付します。 - やな (2004年10月31日 12時08分54秒)
  • Wikiにフォルダという概念を持ち込もうと意気込んでいましたが、結構大変なことになりそうです。現状ではいい線は入っていると思うのですが、細かい点で、フォルダという概念には届いていないような、、、。 - やな (2004年10月31日 12時11分43秒)
  • 最新版 category2v3.zip で、category2belong を使って更新した際、整形済テキストとして行頭にスペースの入った部分が削除されてしまうような気がします。 - 海賊たろ (2004年11月03日 13時20分42秒)
  • ちょっと、修正してみましたので、Category2BelongHandler.diff(542) を添付します。その場しのぎな修正になっている気もしますが^^;<すいません - 海賊たろ (2004年11月03日 13時38分06秒)
  • 対応ありがとうございます。まだ他にもテストしきれていないところがあると思いますが、見つかり次第、修正して行きたいと思います。 - やな (2004年11月03日 14時42分58秒)
  • 膨大なチャットログを分類するのに使っています。とても便利です。ありがとうございます。 - blacksoup (2004年11月29日 19時12分30秒)
  • 最近ですがとても便利に使わせてもらっています - りつ (2005年06月01日 13時56分31秒)
  • 途中でやめてしまったようですが、カテゴリのみを表示させる"no page"はほしいと思いました。もう改良・機能追加はされないのでしょうか? - りつ (2005年06月01日 13時58分12秒)
  • とても便利です。有り難く使わせていただいてます。私も"no page"欲しいと思いました。カテゴリは展開したいけれどもページ名は展開したくない事がかなり多いです。それと、指定したカテゴリを除外するオプションとかあったらもっと便利だなと思いました。出来るものなのかも分からないので適当に好きな事を書いてしまってすいません - papi (2005年11月17日 05時07分48秒)
  • 月並みな賛辞ですがとても重宝しています。なお,頁名に半角カンマが含まれていると、カンマ以前の文字列がカテゴリ階層として認識され,カンマ以降の文字列が下位階層の頁名として認識されてしまいます.この問題を対症療法的に回避する方法を添付ファイル Category2BelongHandler.comment(674)に参考までにuploadしました.(添付ファイルは自由筆記形式です,diff形式でもpatch形式でもCVS形式でもありません.このサイトの運用ルール上ふさわしくないならば,削除してもらってかまいません) - けんいち (2005年12月06日 20時46分43秒-->2006年01月09日 22時57分18秒 加筆)
  • category2listを使うと、Template/で始まるページも拾ってしまうようです。標準のcategoryプラグインのように、Template/で始まるページは拾わないようにするにはどうすればいいかお教えいただけないでしょうか? - kumaneko (2006年01月22日 11時47分10秒)
  • http://gameholics.net/wiki/ にて、"no page"オプション実装などのテストを行っています。ご笑覧いただければ幸いです。 - 近江屋 (2006年02月19日 10時29分39秒)
  • これは非常に便利ですね。でも使ってみてて思ったのですが、リストタグのネストがおかしくないですか?子のulが来る前にliが閉じちゃってます・・・要素ulの子は要素liのみなので、文法違反になっちゃってます・・・。あと、ulやliにはHTML内でユニークであるべきid属性でなくclass属性を使った方が良いかとも・・・。 - 名無しさん (2006年04月22日 05時00分31秒)
  • category2belong をFooterに記述して使用すると、本体のコメント行が全て削除されててしまいます。環境:Windows2003サーバー、IIS-V5.1、FSWiki-V3.6.2、perl-V5.6.1。非常に使いたい機能なので、対処方法をお願いします。 - tk (2007年10月17日 17時41分32秒、2007年11月4日集約・訂正)
  • 全てのカテゴリを一元的に管理できるページが欲しくなり category2map を作りました。すると category2list の全てにこのページが出てきてしまいます。定義だけに使われてcategory2list で無視されるページを設定していただけませんでしょうか。 既出の"no page"と同意かも。 - てつ (2007年11月14日 10時13分03秒)
  • BugTrack-plugin/184中の titleプラグイン を使用していますと、当然ながら category2 において 「タイトル」で登録されます。 これは如何ともし難いでしょうか。 - てつ (2007年11月14日 11時29分06秒)
  • FSWiki3.6.3に入れて見たところ、Can't use an undefined value as an ARRAY reference at plugin/category2/Category2Handler.pm line 420. と出ます。対処方法等あればご教授頂けると幸いです。 - gum (2009年09月14日 14時01分43秒)
  • 本件、Wiki::parse_inline_plugin() に与える引数の仕様が FSWiki 3.6.2 と FSWiki 3.6.3 の間で変更されたことが原因です。BBS-サポート掲示板/667, BugTrack-plugin/342 に同じ問題に関する記載があります。本件については、具体的には category2v3_for3.6.3diff1.diff(370) に示す変更(対象ファイル:Category2BelongHandler.pm, Category2Handler.pm, Category2Title.pm)を実施する必要があると思います。 - 菜梨 (2009年09月14日 17時29分46秒)

category2v3_for3.6.3diff1.diff

diff -urBwbp plugin/category2.orig/Category2BelongHandler.pm plugin/category2/Category2BelongHandler.pm
--- plugin/category2.orig/Category2BelongHandler.pm	2004-10-31 09:24:46.000000000 +0900
+++ plugin/category2/Category2BelongHandler.pm	2009-09-14 17:07:25.000000000 +0900
@@ -54,7 +54,7 @@ sub do_action{
       my $find = 0;
       foreach my $line (split(/\n/, $content)){
 	if(index($line," ")!=0 && index($line,"\t")!=0 && index($line,"//")!=0){
-	  if($line =~ /\{\{(category2\s+(.+?)\s*)\}\}/g){
+	  if($line =~ /\{\{(category2\s+(.+?)\s*\}\})/g){
 	    my $inline = $wiki->parse_inline_plugin($1);
 	    my @args = @{$inline->{args}};
 	    if($args[$#args] eq "nolink"){
@@ -103,7 +103,7 @@ sub do_action{
       my $source = "";
       foreach my $line (split(/\n/, $content)){
 	if(index($line," ")!=0 && index($line,"\t")!=0 && index($line,"//")!=0){
-	  if($line =~ /\{\{(category2\s+(.+?)\s*)\}\}/g){
+	  if($line =~ /\{\{(category2\s+(.+?)\s*\}\})/g){
 
 	    my $inline = $wiki->parse_inline_plugin($1);
 	    my @args = @{$inline->{args}};
@@ -145,7 +145,7 @@ sub do_action{
       my $find = 0;
       foreach my $line (split(/\n/, $content)){
 	if(index($line," ")!=0 && index($line,"\t")!=0 && index($line,"//")!=0){
-	  if($line =~ /\{\{(category2\s+(.+?)\s*)\}\}/g){
+	  if($line =~ /\{\{(category2\s+(.+?)\s*\}\})/g){
 	    my $inline = $wiki->parse_inline_plugin($1);
 	    my @cat = @{$inline->{args}};
 	    if($cat[@cat - 1] eq "nolink"){
diff -urBwbp plugin/category2.orig/Category2Handler.pm plugin/category2/Category2Handler.pm
--- plugin/category2.orig/Category2Handler.pm	2004-10-31 11:54:12.000000000 +0900
+++ plugin/category2/Category2Handler.pm	2009-09-14 17:05:28.000000000 +0900
@@ -414,7 +414,7 @@ sub get_page_category_data{
     if(index($line," ")!=0 && index($line,"\t")!=0 && index($line,"//")!=0){
 
       #find plugin section.
-      while($line =~ /\{\{(category2\s+(.+?)\s*)\}\}/g){
+      while($line =~ /\{\{(category2\s+(.+?)\s*\}\})/g){
 
 	my $inline = $wiki->parse_inline_plugin($1);
 	my @categories = @{$inline->{args}};
@@ -471,7 +471,7 @@ sub get_category2_pagename{
   my $content = $wiki->get_page($page);
   foreach my $line (split(/\n/, $content)){
     if(index($line," ")!=0 && index($line,"\t")!=0 && index($line,"//")!=0){
-      while($line =~ /\{\{(category2title\s+(.+?)\s*)\}\}/g){
+      while($line =~ /\{\{(category2title\s+(.+?)\s*\}\})/g){
 	my $inline = $wiki->parse_inline_plugin($1);
 	$pagename = @{$inline->{args}}[0];
       }
diff -urBwbp plugin/category2.orig/Category2Title.pm plugin/category2/Category2Title.pm
--- plugin/category2.orig/Category2Title.pm	2004-10-31 10:06:52.000000000 +0900
+++ plugin/category2/Category2Title.pm	2009-09-14 17:05:44.000000000 +0900
@@ -39,7 +39,7 @@ sub get_category_title{
   my $content = $wiki->get_page($page);
   foreach my $line (split(/\n/, $content)){
     if(index($line," ")!=0 && index($line,"\t")!=0 && index($line,"//")!=0){
-      while($line =~ /{{(category2title\s+(.+?)\s*)}}/g){
+      while($line =~ /{{(category2title\s+(.+?)\s*}})/g){
 	my $inline = $wiki->parse_inline_plugin($1);
 	$title = @{$inline->{args}}[0];
       }
  • category2belongにてカテゴリ追加/削除の際、整形済みテキスト(行頭半角スペース)の行が削除されるようですが…。こちらの環境依存でしょうか?上でWindows2003server環境の方と同じくFooterで使っています。 - GRIFIS (2010年09月29日 01時29分28秒)
  • また、リストボックスが空白の状態で新規カテゴリ設定すると、第一パラメータが無しでプラグインの記述が入り、1階層目が空白・2階層目にテキストボックスに入力したカテゴリが設定されるました。 - GRIFIS (2010年09月29日 01時32分41秒)
  • 標準の category から移行中なのですが、標準の category ではリストに表示されない参照権限のないページが、category2 ではリストに出てきてしまいます。とりあえずメモ程度に書き始めたページなどは編集権限のない人には見せないようにしておきたいのですがそのような設定はできないのでしょうか。下書きページはフッターに表示させるとか (フッター表示は編集権限が必要) いくつか方法はありますが……。 - ryokkei (2013年03月01日 14時32分14秒)
お名前: コメント: