pgidプラグイン †
PukiWikiのページを、静的なページ風の短いURLで参照出来るようにするプラグイン。
PukiWikiModの仕組みから学んだ*1。
org:欲しいプラグイン/98を受けて作成。
前準備 †
.htaccessに、次の記述を追加
RewriteEngine on
RewriteRule ^([0-9]*)\.html$ pukiwiki.php?plugin=pgid&id=$1
.htaccessでRewriteが利用できない環境では、このプラグインは使用できない。
使い方 †
#pgid(type,page[,opt])
&pgid(type,page[,opt]);
type : 表示形式
url > そのページのIDを利用した場合のURL
link > リンク付きのURL
pgid > リンク付きの[ID: XX]
デフォルト > リンク付きのページ名
page : ページ名 (デフォルト > 表示ページ)
opt : ページ名の代替文字列 (リンク付ベージ名の場合のみ有効)
あるいは、適宜 pgid.inc.php内の関数をスキンに組み込む等。
サンプル †
- ブロック
#pgid
#pgid(url)
#pgid(pgid)
#pgid(link,入口);
#pgid(,入口,「入口」へのIDリンク);
http://m-arai.s41.xrea.com/closet/106.html
- MenuBarに取り込んだ例
***&size(14){''中身''};
-&pgid(,日記の類);
-&pgid(,山画像);
-&pgid(,PC備忘録);
-&pgid(,甲殻類); &size(8){(閲覧制限有)};
-&pgid(,珈琲); &size(8){(閲覧制限有)};
結果は←。
注意 †
ダウンロード †
履歴 †
- 初出 (2004-03-25)
- convert/inlineの表示、パラメータを変更 (2004-03-26)
- テーブル読み込みを減らす (2004-03-26)
- renameプラグインに対応 (2004-03-28)
- convert/inlineによるリンクに「ページ名+passage」のtitleを (2004-03-28)
- 閲覧権限が無く、かつno_listなページに対するIDアクセスをFrontPageへ飛ばすようにした (2004-06-04)
- [[エイリアス名>ページ名]]風に、ページ名代替文字列を指定可能に (2004-10-07)
- $scriptによって、不正なリンクが生成される不具合に部分的対応 (2004-11-20)
- アンカーに対応 ()
#pgid(,FrontPage#hoge)
コメント †
- エイリアスを利用するときにはどのようにすればよいのでしょうか。 --
- 「エイリアス」と言いますと?一つのページに複数のIDを割り当てることは、':pgidtable'を手編集することで可能ですけど。 -- ARAI
- 整形ルールにある、[ [エイリアス名>ページ名]]のことです。 --
- 出来るようにしました。9版で、&pgid(,ページ名,エイリアス名)として下さい。 -- ARAI
- 本体のエイリアスそのものではありません。あくまで風ですけど。
-- ARAI
- 動作確認しました。どうもありがとうございました。 --
- これを使ったページのソースを見るとリンクが http:/(ID).html(e.g. http:/55.html) となってValidorなどでエラーが出てしまいます。これはどこを修正すればよいのでしょうか。 --
- $scriptにindex.php(pukiwiki.php)までを省略無く書いてみて下さい。 -- ARAI
- きちんと表示されるようになりました。ありがとうございました。 --
- recentプラグインなどのpukiwiki1.4.4対応お待ちしております〜 --
- 改めて上げなければならないか疑問に思うほどそのままですけど、一応。
--
- pgidプラグインとblog2プラグインを内部的に利用して、blog2で作成したブログをMovable Type風に表示するプラグインを作りました。http://morejams.no-ip.com/?blog2show -- jax?
- イイですね。そう言われなければ、一見では分かりません。-- ARAI
- どうもありがとうございます。 -- jax?
- とっても素晴らしいものをありがとうございます試して見たところ、うまくいきました。上の説明で「RewriteRule? ^([0-9]*)\.html(#.*)?$ /pukiwiki.php?plugin=pgid&id=$1$2」に関する記述が古いので直した方がよいかな、と思いました。あとpgid.inc.phpのはじまりが「<?」なのですが、これは「<?php」にした方がよいかなと思いました。ありがとうございました! -- 志田?
- すみませんリロードしてしまいました m(_ _)m あと、topicpath pluginの修正をしてみました。unified diff形式でをこんな感じでpluginが<a>タグを出しているところはみんな直さないといけないんですよね? -- 志田?
- すみまません、途中でいっちゃいました orz 慣れていなくてほんとうにすみません。 unified diff 形式で、pukiwiki.org:欲しいプラグイン/98の方にアップしてみました。こんな感じでpluginが<a>タグを出しているところはみんな直さないといけないんですよね? -- 志田?
- 拝見しました。問題無いように思います。「<a>タグを出しているところはみんな直さないといけない」ことはありませんよ。
![[smile]](image/face/smile.png)
<?phpの件は、次版を出すことがあれば修正します。記述が古いというのはちょっと分からないのですが
? -- ARAI
- ありがとうございます。topicpathですが、もしよろしければ、こちらのサイトのrecentプラグインなどと一緒に配布していただけるととっても本望です。 -- 志田?
- 記述が古いという件ですが、説明不足ですみません。このページの上部に「前準備」とあり、そこに、「RewriteRule? ^([0-9]*)\.html$ pukiwiki.php?plugin=pgid&id=$1」とありましたが、pgid_inc.phpのソース内を見ると、「RewriteRule?? ^([0-9]*)\.html(#.*)?$ /pukiwiki.php?plugin=pgid&id=$1$2」と書いてあり、このソース内の記述の方が正しそうだったので、指摘させて頂きました。 -- 志田?
- <a>タグに関してですが、自分はあまり、pukiwikiの内部の作りはわからないのですが、今回のtopicpathとか、ls2とか、naviのように、自動で他のWikiページへリンクを作ってくれるpluginがいろいろあると思うのですが、それらが今回のtopicpathのようにプログラム中に<a>タグに関する記述をしているような場合は、全部を直さないといけないのかなーと思いまして… -- 志田?
- topicpatch配布についてですが、申し訳ありませんが、ご希望には添えません。配布するということは、例え僅かであってもそれなりの保守コストが伴うわけでして、自前の改造でもなく、使っている訳でもないものについてまでは背負いかねます。
![[worried]](image/face/worried.png)
本プラグインを普通に使うために必要なrenameの改造はともかく、skinやrecentの改造は言わば付けたし、サンプル的なものに過ぎず、同様の改造についてその他まで広げて公開していくつもりは無いのです。
.htaccessの記述については、ページとソースで確かに齟齬が出ていますが、実は
どちらも間違いではありません。ある意味ではこのページの記述の方が、(#.*)の
ような不要な部分が無く、絶対パスで書いていない分、問題が起き難いかもしれません。
この辺りはいづれ良く調べて書き直すべきだとは思います。
「ページリンクを作成するプラグインは全て一々書きなおさねばならないのか?」という
質問でしたら、答えは'Yes'とも'No'とも言えません。
仮にPukiWiki本体に
手を付けてBracketName等のリンクをページIDで出力するよう改造したとしても、
プラグイン独自で生成している部分に効力が及ばない*2のは言うまでもありません。
結局は、「ものによる」ということです*3。
このプラグインの売りは、一切本体に手を付けず、プラグインと.htaccessの設定だけで数字ID.html*4なPukiWikiページアクセスを
実現するということです。その一方で個々の対応が必要になってしまうのは、ある種の宿命*5と言えるでしょう。-- ARAI
- もろもろ理解しました。
それでは、今後自分が付けたしとして他のプラグインにも手を加えた際は、別の場所から配布をするように致します。
お手数をおかけいたしました。 -- 志田?
- pukiwiki最新バージョンへの対応よろしくお願いします。 --
- pgidプラグインはそのままで動くでしょう。rename/recent/skinも改めて対応という程でもないとも思いますが、土日あたりに。 -- ARAI
- ほとんどそのままな1.4.5_1対応はすぐに出来たものの、decodeに若干の疑問が生じたので、それが解決するまで保留します。 -- ARAI
- 1.4.6でもそのままで問題なく動作しているようです。 --
- 1.4.6でも一見問題なく動いているように見えるのですが、pukiwiki.skin.phpが大幅に変更されたことですし、ここらで作者さんが1.4.6に完全対応したバージョンをリリースして頂けませんか。 --
- 完全と言えるかはわかりませんが、こんなところでしょう。殆んど変わりませんが。 -- ARAI
- pukiwikiplus i18n版では動作しません。 -- アッカ
- 送信を押してしまいました・・・非常に便利なプラグインなので、対応を考えていただけるとうれしいです。 -- アッカ
- 動作しないとはどのような意味でしょうか。pukiwiki-1.4.6plus-u2-i18n.tar.gzでは普通に使えるようですが。 -- ARAI
- プラグインの書式を入力すると、ID付のリンクを作ってくれます。しかしリンク先のページが404で見つからないんです。 -- アッカ
- その生成されるリンクは期待通りになっていますか?.htaccessの記述、位置は適切ですか? -- ARAI
- リンクは動作していたEUC版と同じなので、期待通りだと思います。・・・htaccessは、pukiwikiのトップディレクトリのhtaccessで、一番最後に記述を追加しています。 -- アッカ
- 整理したいのですが、「pukiwikiplus i18n版では動作しません。」ということは、通常のPukiWiki、あるいはPukiWiki Plus! eucjpでは期待通りに動作していた環境設定そのもので動作しないということでしょうか?であるなら、原因は分かりそうにありません。私の所では再現することが出来ませんし、申し訳ありませんが、そうなる可能性についても全く予想がつかないのです。サーバ環境等、完全に再現出来る情報があれば*6手がかりが掴める可能性はゼロではありませんが… -- ARAI
- 私は1.4.6-u2-i18n/を、xreaで稼動しています。その環境で動いているようですから、私がインストール時の設定を間違えただけだと思います・・・ -- アッカ
- インストールする再、変更する.htaccessは、pukiwikiトップディレクトリのものだけでよろしいんですよね? -- アッカ
- pgidプラグインが期待通りに動いていたかということを確認したかったのですが…このページに「pukiwikiplus i18n版では動作しません。 」とコメントされる以上、そういうお話なんですよね?今思い至ったのですが…もしかして、pukiwiki.phpが無いのにRewriteRule?で指定しているとか? --
- 確かにi18n版にはpukiwiki.phpないですね -- アッカ
- お手数をおかけして申し訳ないです・・・やってみてうまくいった・・・と思ったんですが、ページによってうまくいかないようです・・・http://doracken.com/wikiplus/?pageid -- アッカ
- 日が本語のページ名だけで問題があれば,試しにpgid.inc.phpをUTFに変換してみて下さい。 -- ARAI
- ありがとうございます -- アッカ
- 変化はないようです。 -- アッカ
- :pgidtableを一度削除してみて下さい。それでダメなら...出先なんで、しばらく無理です.すいません。 -- ARAI
- 本当にありがとうございます!うまくいきました! -- アッカ
- 1.4.7だと動かない。 --
- 手元では、とりあえず問題なく動いているようです。また、特に「1.4.7だと動かない」ということも、ちょっと思いつかないのですが… -- ARAI
- htaccessをRewriteRule? ^([0-9]*)\.html$ index.php?plugin=pgid&id=$1にしたら動きました。でも「最新の10件」のリンクが正常にでない。全てのリンクがトップディレクトリを指してしまう。例)http://xxxxxxxxx/ recent.inc.phpが微妙に1.4.6と違うようだけどその部分だけでも書いていただけますか。 --
- 殆どそのままで、あまり意味は無いとは思いますが…暇が作れたら出しておきます。最近色々疲れてまして。それにしても、「例」に挙げられていたサイトは名前すら解決できませんでした。 -- ARAI
- こんにちは、はじめまして。こちらのプラグインを使わせてもらっています。ページ内のリンクをする時に本来なら[[タイトル>ページ名#xxxxxxxx]]のようにページ名の特定の部分にpgidでリンクを張ることは可能でしょうか? --
- 説明が悪かったかもしれませんので追記です。従来の方法だと[ [タイトル>ページ名#xxxxxxxx] ] のようにやっていた方法です。 --
- 不可能でした。
-- ARAI
- ここのWikiのように最新10件とかの部分を、短いURLで表示するにはどうしたら良いのでしょうか? --
- pgidプラグインをインストール、recent.inc.phpを改造してください。1.4.6用ですが差分(skin_recent_rename_01.diff.bz2)が置いてありますから、それを参考に適宜。差分の当て方やbz2ファイルの展開法などはここで扱うものではありませんので、悪しからず。 -- ARAI
- pgid便利に使わせていただいています。ところで、お知らせページなど一定期間後削除するページの番号って欠番になってしまうと思うのですが、新たにページを作ったときに再利用する方法はあるのでしょうか? -- manbo
- :pgidtableを手で編集して、好きなように再割り当てしてください。新規ページがどんどん出来てくるような活発なサイトであれば、一時的にREADONLYにするなどしてPukiWikiの動作を止めないと、更新の衝突が起こるかもしれませんので、その辺は要注意です(編集作業中にページが複数新規作成された場合、新規分のID順序が狂う可能性がある)。あるいは、リセットしたいだけなら、:pgidtableを単純にページ削除するだけです。
それにしても、再利用…ですか?「一IDに対して一ページ名」を壊してまで「再利用しなければならない理由」、あるいは「再利用すると良い事」はまるで思いつかないのですが、一体何でしょうか?*7 -- ARAI
- 早速の回答ありがとうございます。やはり手作業で割当ですか・・(^^; ご質問の件ですが、800ページ位あるサイト上で、お知らせコーナーがあり、毎月約40ページの追加・削除を行っています。すると、あっという間に4桁超えてページ番号が膨れ上がるばかりなので、削除したページの番号を自動的に再利用する仕組みが合ったら無用?な増殖を抑えられるのではないかと考えました。変ですかね・・・ -- manbo
- 変とまでは言いませんが…定常的に臨時の
お知らせがあるなら、特定のお知らせページを更新していけばいいんじゃないかとは思います。 -- ARAI
- [[&ref(photo.jpg,nolink,photo,,photo);>写真ページ]]のようにイメージにリンクをつけて、そのリンク先をこのプラグインを使って行いたいのですが、どうすればよろしいでしょうか? -- xliz
- ご希望のイメージは大体分りましたが、 [[&ref(photo.jpg,nolink,photo,,photo);>http://〜/XXX.html]]では駄目ですか? -- ARAI
- 今はそれで応急処置を行っていますが、いちいちURLを設定するのもスマートじゃないな、と思いまして。 -- xliz
- ふうむ、$str_rulesを応用すればちょっとはマシになるかもしれませんが、「スマート」ですか…。調べたことはありませんが、[[エイリアス名>ページ名(or URL)]]において、エイリアス名はともかくリンク先となるページ名(or URL)について本体無改造&プラグインでどうこうというのは多分無理なのではないかと思います。 -- ARAI
- ↑は逆に考えれば、「ページ名の代替文字列」にwiki のルールを適用できるように、という提案って事?今は、&pgid(,ページ名,&ref(photo.jpg,nolink,photo,,photo);); と書くと、代替文字列がそのまま(プラグインが実行されずに)表示されますし。 --