最近欲しかったプラグインがあった。というわけで差分表示プラグインNP_Revisionが海外で絶賛公開中 (revision [Wiki:NucleusCMS])。
以下rakaz - NP_Revision 0.6の和訳的なこと (2006/12/09)。Excite翻訳とgoo辞書が頼り。元記事のリビジョンは1.11。最新バージョンはこの記事にある0.6じゃなくて0.7。
NP_Revision 0.6
- Nucleus CMSでパーペキなRevisionを実現 -
このプラグインで、私はCVSやSubversionのようなコード管理システムを実現した。これらのツールはソースコードの改変を記録するリポジトリを提供している。ソースコードに何らかの変更があるとそのファイルはリポジトリに戻されるが、従来のファイルシステムとは異なり古いバージョンのものが再利用可能で、そのうえdiffを使うことでファイルにこれまでどのような修正がなされてきたか簡単に知ることができるのだ。
先週、ふと、同様のシステムが私のブログで実現できるのではないかと思った。いままでは投稿を修正すると元のバージョンは永遠に失われてしまっていた。投稿を修正すると新しいリビジョンが作成されて公開され、一方で古いリビジョンも利用可能……私はそんなシステムが欲しかった。これまでにどんな修正が行われてきたかすぐに見渡せるようにしたかったし、もし気に入らない修正点があれば古いリビジョンに戻せるようにもしたかった。
ブレイクスルーになったのはdiffをPHPで実現させているアルゴリズムの発見だった。そのアルゴリズムはphpWikiのために作られ、人々によってMediaWikiに適合されていた。そいつは私が求める仕事を完璧にこなしてくれた。重要なパーツであったにもかかわらず、プラグインに書かなきゃいけないコードはグンと少なくなった。その日から私はリビジョン・システムの実現のためにコードを書き始め、今準備は整った。そのコードはNP_Revisionという名前を持って、近々ベータ・バージョンとしてリリースされるだろう。
実際に行う動作
あなたが記事を修正すると、このシステムは修正を記録し、リビジョン・ナンバーを割り当てる。例えば、あなたが記事をドラフト状態で作成すると、それは"0.1"の番号を持つことになるだろう。あなたが次にそれを修正すると"0.2"の番号が記事に与えられ、その次は"0.3"…と続く。あなたがドラフト指定を解除して記事を公開すると、"1.0"の番号が与えられ、その後の修正ではドラフトのときと同様に番号が増加する。このシステムの美点は、あらゆる古いバージョンが依然として使用可能であるということだ。
例を出そう。私のブログの記事、"Pear PC needs help"を見て欲しい。その記事はhttp://www.rakaz.nl/nucleus/item/60というURLで公開されている。このURLでは最新のリビジョン(この記事では1.2)を表示している。最新リビジョンの番号が1.2ということは、少なくともあと2つ、1.1と1.0のリビジョンが閲覧可能だということだ。それらのリビジョンにアクセスしたければ、URLにいくつか付け加えればOKだ。もしFancyURLが有効なら、"/revision/1.1"を付け加えればよい。
http://www.rakaz.nl/nucleus/item/60/revision/1.1
URLが通常状態のままなら、"rev"というパラメータを追加する。
http://www.rakaz.nl/nucleus/index.php?itemid=60&rev=1.1
上のURLを訪問すると、警告文に気づくと思う。記事が最新のリビジョンでないことを警告しているもので、古いリビジョンには例外なく表示される。でもプラグインの管理でカスタマイズや無効化が可能だ。
リビジョン管理
管理画面でこのプラグインが登場するのはアイテム編集画面だけだ。"Comment for next change"というフィールドがあって、修正についてのコメントを少しだけ残すことができる。これらのコメントはdiffとアイテム編集ページのリビジョン一覧で見ることができる。コメントは必須ではないが、変更の流れをおさえる手助けになるだろう。
コメント用フィールドのすぐ下には利用可能なリビジョンの一覧がある。全てのリビジョンについて、番号と時刻、コメントを見ることができ、さらに記事を古いリビジョンに戻したり、2つのリビジョンのdiffを取って見ることもできる。
記事を古いリビジョンに戻す場合、基本的にアイテム・オプションを含む全てのフィールドが以前のリビジョンと同じ状態である新しいリビジョンが作成される。全ての修正点が元に戻る。タイトル、本文、続き、コメントが許可されているか否かまで全てだ。ドラフトのリビジョンに戻す場合はそのアイテムはドラフトに戻り、閲覧者から見えなくなる。
テンプレート変数・スキン変数
以下の変数がテンプレート・スキンで使用可能になる。
<%Revision(current)%>
現在表示されているリビジョンの番号が表示される。通常は最新リビジョンの番号だが、ユーザーが古いリビジョンを見ている場合は古い番号が表示される。
<%Revision(currentdate)%>
(訳注 : 説明なし)