tag.inc.php

Top > Plugin > tag.inc.php
First Edition. 07/29/2006.
Last Modified. 07/22/2008.
Tag: PukiWiki Plugin

Tag Plugin

Table of Contents

Abstract

ページにタグを付けます。タグを付ける事でグループ分け、カテゴリ分けができます。

このマニュアルページでは、タグ付けプラグイン tag.inc.php、タグクラウド表示プラグイン tagcloud.inc.php、タグ付きページリストプラグイン taglist.inc.php の3点セットの紹介をしています。

使用法

Configuration

タグクラウド CSS

タグクラウド機能を使用するなら以下の CSS をスキンに追加してください。

svn:plugin/tagcloud.css

書式

Tagging tag.inc.php

Format

&tag(tag[,tag[,tag[,...]]]);

注意: ^ と - は特別な意味を持つ文字なのでタグには使えません。ページリストの際に ^ は共通ページを(積集合 ∩ のイメージ)、- は差ページ(差集合のイメージ)をリストするのに使用します。

Example

&tag(PukiWiki,Plugin);
&tag(プラグイン);

Result

Tag: PukiWiki Plugin Tag: プラグイン

リンクは taglist プラグインへのリンクとなります。


タグクラウド (タグのリスト) tagcloud.inc.php

いわゆるタグクラウドの表示(タグのリストアップ)には、tagclould プラグインを使用します。

Format

#tagcloud([オプション])

オプション

  • limit=数字
    • 表示最大件数の指定。デフォルトは全て。
  • related=タグ名
    • 関連タグのみを表示。デフォルトは全て。
  • cloud=off
    • タグクラウド表示ではなく、ただのリスト。デフォルトはタグクラウド表示

Example

#tagcloud(related=PukiWiki)

#tagcloud(related=PukiWiki,cloud=off)

タグ付きページのリスト taglist.inc.php

タグ付きページのリストを表示するには taglist プラグインを使用します。

書式

#taglist(tag=タグトークン[,オプション])
#taglist(タグトークン[,オプション])

タグトークン:タグトークンには、「タグ名」や「タグ1^タグ2」、「タグ1-タグ2」のような書式を使用することができます。「タグ名」とするとそのタグが付けられているページのリストに、「タグ1^タグ2」とすると、タグ1とタグ2両方のタグが付けられているページ(積集合 ∩ のイメージ)のリストに、「タグ1-タグ2」 と指定しすると、タグ1が付けられているページのうち、タグ2が付けられていないページ(差集合のイメージ)のリストになります。

その他、オプションは lsx.inc.php とほぼ同一なオプションが使用できます。lsx.inc.php のページを参照してください。 prefix, hierarchy, tree, depth などの階層派のオプションが使用できないだけです。

Example

#taglist(tag=Plugin-Old)
#taglist(Plugin-Old)

タグ+タグ配下ページ一覧

この機能はアルファ機能です。仕様が固まっていないので、将来変更されることがあります。

taglist オプションで tag を指定しなかった場合、全タグ+タグ配下のページを一覧できます。

書式

#taglist([オプション])

オプション

  • related=タグ
    • related オプションを使用すると、関連タグ+タグ配下のページの一覧になります。

#taglist(related=Plugin)

FAQ

タグ付け時に何も表示してほしくない

Plugin/enull.inc.php を使用してください。

ページを削除してもタグは消えない?

PukiWiki の仕組み上、プラグインはページ参照時にしか起動できないためページが削除されてしまうとタグを更新できません。 ページを削除する前に &tag(); としてタグの削除をしてください。 もしくは、アクション型プラグインとして index.php?cmd=tag のようにアクセスするとキャッシュをクリーンアップできます。

PukiWiki 本体改造で乗りきる方法も用意してみました*1。 pukiwiki/lib/file.php の編集をします。 page_write 関数の末尾に

	log_write('update',$page);
+	if (exist_plugin('tag')) {
+		do_plugin_init('tag');
+		plugin_tag_write_after($page, $postdata, $notimestamp);
+	}

のように追加。あまりテストはしてません。

ページをリネームしても・・・

同様です。

rename プラグイン改造で乗りきる方法も用意してみました*2。 plugin_rename_proceed 関数に、以下を追加します。

              links_update($old);
              links_update($new);
          }
      }
+     if (exist_plugin('tag')) {
+         do_plugin_init('tag');
+         plugin_tag_rename_plugin($pages);
+     }
      $postdata = get_source(PLUGIN_RENAME_LOGPAGE);
      $postdata[] = '*' . $now . "\n";

あまりテストはしてません。

タグの置換はどうすれば

replaceplugin.inc.php を使用してみてください。

置換後、アクション型プラグインとして tag プラグインを起動し、タグキャッシュをクリーンアップしてください。

キャッシュ仕様

cache ディレクトリに encode(タグ名)_tag.tag, encode(ページ名)_page.tag, tagcloud.tag のようなファイルを作成します。

encode(タグ名)_tag.tag
そのタグに登録されているページ群。タグ→ページ群 (~.ref 相当)
encode(ページ名)_page.tag
そのページが登録しているタグ群。ページ→タグ群 (~.rel 相当)
tagcloud.tag
全タグとそれぞれに対しての登録ページ数

ページ参照時、ページのタイムスタンプが encode(ページ名)_page.tag よりも新しければ更新処理を行います。 現在の PukiWiki プラグインの枠組み上、ページ更新時にプラグインを実行できないのが辛い所です。

タグクラウド表示は org:自作プラグイン/tagcloud.inc.php を真似して astronote | PHP で TagCloud を使用させてもらっています。

関連タグというと・・・

tag プラグインにおける、関連タグの技術的な定義は、同時に指定されたことのあるタグ群です。例えば「あるページ」で

&tag(A,B,C);

と指定されると、タグA は、B、C と関連します。「別のページ」で、

&tag(A,D,E);

とされると、結果、タグA は、B、C、D、E と関連します。しかし、タグC の関連はあくまでも、A、B だけです。

Download

開発版

Sonots PukiWiki Plugin Collection に含まれています。

lsx-vX.XX.zip をダウンロードし、plugin ディレクトリ以下に展開してください。
同時梱包されているその他のプラグインは上述ページ内の「Release Notes」リンクから参照できます。

旧版

技術的詳細

背景

Pukiwiki には元々、類似の org:Use PukiWiki/カテゴリー という機能はあるのですが、他の機能を無理やり利用したようなもので、非常に使用しづらいと感じております。説明もせいぜい先のページぐらいしかなくわかりにくいため、使用している人は少ないのではないでしょうか。

このカテゴリ機能の仕組みを簡単に説明します。現在ページ内でリンクを張ると、cache/encode(リンクページ).ref のようなファイルに現在ページが登録され、その「リンクページ」内で #related を設置すると、.ref ファイルに登録されたページの一覧が表示されます。

「リンクページ」を用意しなければ .ref ファイルは作成されませんし、ただリンクを張るだけでカテゴリーが作られるのでは(それが楽なことがあるのもわかりますが)ノイズが非常に多くなりますし、#related は引数をとらないので「リンクページ」にしか設置できないという、カテゴリー付けとしては非常に使いにくい仕様となっています。

よって、単純にタグをつけるプラグインが必要と思いました。タグという名前の方が昨今では一般的ですし。

PHPDoc

Related



*1 PukiWiki がページ新規作成時、書き込み時、削除時にプラグインを作動させる仕組みを持っていれば改造すらせずに済むのですが
*2 rename プラグインがページ名変更時に他のプラグインを作動させる仕組みを持っていれば、もしくは PukiWiki がプラグイン用プラグインの枠組みを用意していてくれれば改造すらせずに済むのですが