tag.inc.php
Tag Plugin
Table of Contents |
Abstract
ページにタグを付けます。タグを付ける事でグループ分け、カテゴリ分けができます。
このマニュアルページでは、タグ付けプラグイン tag.inc.php、タグクラウド表示プラグイン tagcloud.inc.php、タグ付きページリストプラグイン taglist.inc.php の3点セットの紹介をしています。
使用法
Configuration
タグクラウド CSS
タグクラウド機能を使用するなら以下の 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)
- Hack/navi.inc.php
- Manual/Plugin/tag.inc.php/dev
- Manual/Plugin/tag.inc.php/rev183
- Manual/Plugin/tag.inc.php/rev184
- Manual/Plugin/tag.inc.php/rev201
- Manual/Plugin/tag.inc.php/rev563
- Plugin/dump2html.inc.php
- Plugin/lsx.inc.php
- Plugin/popularx.inc.php
- Plugin/splitbody.inc.php
- Plugin/statichtml.inc.php
- Plugin/tag.inc.php
- Plugin/votex.inc.php
- Weblog/2008-10-23
タグ+タグ配下ページ一覧
この機能はアルファ機能です。仕様が固まっていないので、将来変更されることがあります。
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」リンクから参照できます。
旧版
リビジョン | 日付 | マニュアル |
rev201 tag.inc.php ![]() tagcloud.inc.php ![]() taglist.inc.php ![]() | 03/28/2008 | Manual/Plugin/tag.inc.php/rev201 |
rev184 tag.inc.php ![]() tagcloud.inc.php ![]() taglist.inc.php ![]() | 03/19/2008 | Manual/Plugin/tag.inc.php/rev184 |
rev183 tag.inc.php ![]() lsx.inc.php ![]() contentsx.inc.php ![]() includex.inc.php ![]() | 01/10/2008 | Manual/Plugin/tag.inc.php/rev183 |
rev563 at 旧svn tag.inc.php ![]() lsx.inc.php ![]() contentsx.inc.php ![]() includex.inc.php ![]() | 05/27/2007 | Manual/Plugin/tag.inc.php/rev563 |
技術的詳細
背景
Pukiwiki には元々、類似の org:Use PukiWiki/カテゴリー という機能はあるのですが、他の機能を無理やり利用したようなもので、非常に使用しづらいと感じております。説明もせいぜい先のページぐらいしかなくわかりにくいため、使用している人は少ないのではないでしょうか。
このカテゴリ機能の仕組みを簡単に説明します。現在ページ内でリンクを張ると、cache/encode(リンクページ).ref のようなファイルに現在ページが登録され、その「リンクページ」内で #related を設置すると、.ref ファイルに登録されたページの一覧が表示されます。
「リンクページ」を用意しなければ .ref ファイルは作成されませんし、ただリンクを張るだけでカテゴリーが作られるのでは(それが楽なことがあるのもわかりますが)ノイズが非常に多くなりますし、#related は引数をとらないので「リンクページ」にしか設置できないという、カテゴリー付けとしては非常に使いにくい仕様となっています。
よって、単純にタグをつけるプラグインが必要と思いました。タグという名前の方が昨今では一般的ですし。
PHPDoc
Related
- org:Use PukiWiki/カテゴリー
- dev:BugTrack2/80
-- links_update の処理を見直そう. cmd=links
- org:自作プラグイン/tagcloud.inc.php
--標準 .ref 用のタグクラウド。ページリンク時(カテゴリ作成時)に tag/ 接頭辞を付けることでノイズを減らす工夫を推奨している。
- org:自作プラグイン/belong.inc.php
-- 標準 .ref 用のリスト。#related 拡張のようなもの。
- astronote | PHP で TagCloud
-- タグクラウド表示(採用)
- ちなみに、タグに数字を使うとおかしくなるバグがあった。修正された版は tag.inc.php ソース参照。
- PEAR :: PEPr :: Details :: HTML_TagCloud
上よりも高機能だが今の所上で十分
- org:PukiWiki/mbstring無しのPHPでの動作
- レンタルサーバなどで mbstring がサポートされていない場合は jcode.phpで代用するという手もあります。