PukiWikiプラグイン開発(3) 習作2号「heebtn」
STATUS: 故障中
前回の randwordプラグインに続き2作目のプラグインを作ってみました。
heebtnプラグイン (テストページ)
ボタンを押すたびに右に表示されている数字がカウントアップする。
自己書き換え型のプラグインのサンプル。
同一ページに複数のheebtnプラグインがある場合、ボタン名で区別をしているため、同じボタン名のheebtnプラグインが複数ある場合は、それらすべてがカウントアップの対象となる。
heebtn2として対策版を作成する予定。
#voteプラグインのように操作をするとプラグイン自身のパラメータを書き換えていくタイプのものを作る練習です。
#voteや#commentプラグインのソースを見ると、仕様書に載っていないような内部変数使ったりしていやんな感じです。また、妙に複雑なような(digestって何につかっているのかまだ良く分からない)気がするので、ソースを参考にしながら1から作ってみました。
convert関数のほうは特に問題なく作れましたが、action関数側ではまりました。
コマンド型のプラグインの場合は、通常action関数の戻り値でページのタイトル・本体を返すのですが、そうするとその回はページは表示されるものの、表示されたページはどのページか分からなくなってしまいます($vars['page']が空)。また、左や上のメニューが表示されません。
今回のような場合の対処は、本体を空にして返すことでした。
そして$post['page']と$vars['page']に移動先(というか元のページ)のページ名を設定するとうまくいきました。
$post['page'] = $vars['page'] = 移動先のページ名
return array( 'body'="" , 'msg'="タイトル文字列" );
また、#voteプラグインでは $_title_updated というグローバル変数を使っていますが、これには 「ページ名」+「を更新しました」という文字列が入っていました。
この辺の内部的な変数ぽいの直接使っていいのかなあ。
さて、このバージョンでは同一ページ内のプラグインの識別には第1パラメータ(ボタン名)をもとに行っていますが、これでは不完全です(同じ名前のボタンのプラグインがすべて同一視される)。
これを回避するために、#voteや#commentプラグインでは、ページ内での順番で識別しています。その、順番を取得する方法は・・・なんか泥臭いです〜。順番取得する関数とか用意してくれればいいのに。
次回は、今回のプラグインを改良してボタン名が同じでも区別されるようにしてみます。 コメント