relatedview.inc.php†
サマリ | 指定ページを参照しているページからリンク行を一行include |
リビジョン | 0.15 |
対応バージョン | 1.4.4-1.4.6rc |
投稿者 | Cue |
投稿日 | |
設置したページに対してリンクしているページから、リンクの書かれた一行を抜き出して表示します。
各ページに散らばった情報を簡単に柔軟な視点で切り取る事が可能になります。
基本的な考え方は Use PukiWiki/カテゴリー を参考にして頂いた方が解りやすいと思います。
relatedviewではページを指し示すだけでなく、ページ内からリンクしている行を取り出してデータを再構築し、リンクそのものも相互リンクとして活用します。
なにができるの?†
説明を簡単にするためAutoLinkを有効にしてあるとします。
ページA
名前 | タイプ | 重要度 |
add | コマンド | 1 |
amazon | インライン,ブロック |
aname | インライン,ブロック | 4 |
article | ブロック | 3 |
attach | ブロック | 5 |
ページB
名前 | タイプ | 重要度 |
back | ブロック | 1 |
backup | コマンド | 5 |
br | インライン | 2 |
bugtrack | ブロック | 1 |
bugtrack_list | ブロック |
上のような2つのページがあるとき、ブロックというページを作って#relatadviewと書き込むとこんな表示が得られます。
ブロック
同じようにインラインというページを作り、それぞれを種類別一覧といったページでインクルードすると良いかもしれません(?)。
なお、テーブルのヘッダを出したい時は[[ >ブロック]]のような見えないリンクをページAかBどちらかのヘッダ行に入れると取り込んで表示します。
使い方†
- 書式
#relatedview
#relatedview([nowikiname],[noautolink],[search=>pages],[nosearch=>pages])
(引数は順不同)
- nowikiname,noautolink
- それぞれWikiName,AutoLinkで付けられたリンクを追いません。
- search,nosearch
- リンクを追う/追わない対象ページを指定します。
(no)search=>pagesでpagesから始まるページ名を対象にします。
#をデリミタとする文字列はそのまま正規表現パターンとみなします。
ライセンス†
GPLでお願いします。
インストール†
- 自作プラグイン/relatedview.inc.php/ソースコードを relatedview.inc.php という名前で保存
- ファイルを plugin ディレクトリに配置
- テーブルとリストは間に空行を入れずに整形されます。テーブルのフィールド数が同じならば一つのテーブルが生成されます。
- それ以外の行は空行を挟んだパラグラフ扱いになります。
- ターゲット行にある元ページからのリンクは、元ページへ戻るためのリンクに自動的に置き換えられます。
- ターゲット行がテーブルで上セル連結されていた場合、連結は解消されて実データが入ります。
オプションにWikiテキストを記述すると最初に出力されます。複数行分を入れたい場合はカンマ(,)で区切って改行を入れずに記述してください。
この仕様は取り消されました。テーブルヘッダ等を出力したい場合は適当なページにヘッダを記述しダミーのリンク([[ >カテゴリー]]等)を挿入してください。
include系のプラグインとは相性の悪い事があるかもしれません
ブロックプラグインのある行は読みこまない仕様に変更しました。&ref等のインラインプラグインでパスが必要になる場合はフルパスで記述してください。*1。
- 1.4.6_rcの複数行プラグイン引数に対応しました*2。
今のところBracketNameしか対応できてません。
WikiName,AutoLinkに対応しましたが、予想外のページが読みこまれたりするので新設のオプションを活用してください。
あと残るは Autoalias 対応辺りでしょうか。
コメント†
- ブロック単位で処理しようと考えてたらえらいことになりそうになったので、収拾つかなくなる前にとりあえず置いておきます。 -- Cue
- ブロック単位は止めました。まとまったブロックならインクルードするなり他に方法があると判断したためです。 -- Cue
- 降順にならびかえるにはどこを設定すれば良いんでしょうか? -- アッカ
- 今のところソートは走査するページの順番を整えるためだけに使っていますので設定はありません。もし、この部分を逆順にしたいのなら「natsort($links);」の後ろに「$links = array_reverse($links);」を加えれば逆順になります。
もし読み込んだ内容をソートしたいのなら「$retval = empty($body) ~」の直前にソートを入れれば可能ですが…テーブルヘッダなどを読み込んでいると表示がおかしくなりそうです。 -- Cue
- #relatedviewとだけ記述すると、autoリンクを追うページと追わないページがあるんですが、仕様でしょうか? -- アッカ
- 状況がわからないので詳しくお聞きしますが、
(1)#relatedプラグインで、追わないページは表示されていますか?
(2)追わないページ名はどのようなページ名ですか?
(3)現象の出たPukiWikiのバージョンと、何かパッチを適用しているか教えてください
-- Cue
- 大変申し訳ない。解決しました。リンクしているページを一度更新したところ、抜き出して表示してくれました。 -- アッカ
- 時々あるみたいですね。このページもCueから#relatedで見えてませんし。 -- Cue
- やはりリンクされないページがあるようです。オートリンクを使用してりんくしているんですが、取得してくれません。ページ名のバイト数でしょうか?
- PukiWiki1.4.5_1+PHP4.3.11で試してみましたが、うちでは再現しません。原因不明なんで対処できないです…。(1.4.6_rc対策の部分に別のバグ見つけましたけどそれはこれと無関係。あとで修正版上げないと) -- Cue
- linksプラグインでキャッシュを更新してみては? --
- それも考えたんですが、#relatedで見えてるんです。#relatedも#relatedviewもlinks_get_related_db使ってるのでlinksの問題ではないみたいなんです。で、その先の問題かと思って再現しようとしたけど再現しないと。 -- Cue