サマリ | ボタンを押すと指定文字列を追加するプラグイン |
---|---|
リビジョン | 0.13 |
対応バージョン | 1.4 |
投稿者 | sha |
投稿日 | 2003-07-30 (WED) 00:03:38 |
ブロック型プラグイン/インライン型プラグイン
#addline(設定名,[above|below|up|down|btn:<ボタン名>|ltext:<左テキスト>|rtext:<右テキスト>]) &addline(設定名,[before|after|above|below|up|down]){<リンク名>};
設定名: 「:config/plugin/addline/設定名」の指定 above|below|up|down: #commentと同じで、追加するのがボタンの上か下かの指定 btn: submitボタンに付ける名前 ltext,rtext: submitボタンの左右につけるテキスト before,after: インライン型の場合に、追加するのがリンクの前(左)か後(右)の指定
|&attachref(,zoom,90x90);|&attachref(,zoom,90x90);|&attachref(,zoom,90x90);| |&attachref(,zoom,90x90);|&attachref(,zoom,90x90);|&attachref(,zoom,90x90);| #addline(テーブル1,above)「:config/plugin/addline/テーブル1」の内容
|&attachref(,zoom,90x90);|&attachref(,zoom,90x90);|&attachref(,zoom,90x90);|
CENTER:「納豆は好きですか?」~ &addline(グラフ,before){【は い】};▲&addline(グラフ,after){【いいえ】};~「:config/plugin/addline/グラフ」の内容
&heart;【表示例】
|>|>|CENTER:~&addline(テーブル1,down){[リンク追加]};&addline(テーブル2,down){[ハート追加]};| |&attachref(,zoom,90x90);|&attachref(,zoom,90x90);|&attachref(,zoom,90x90);| |&heart;|&heart;|&heart;|【表示例】
[リンク追加][ハート追加] | ||
---|---|---|
[添付] | [添付] | [添付] |
&heart; | &heart; | &heart; |
|&heart;|&heart;|&heart;|
リビジョン | 内容 |
v0.13 | XHTML1.1 validation check済み |
v0.12 | debug/ページ名が文字化け |
v0.11 | debug/コメント行「//...」対応 |
v0.10 | debug/リンク名指定にバグ |
v0.9 | ブロック型をセンタリング。引数位置無視。debug用秘密引数 |
v0.8 | インライン型にabove,below,up,down引数を追加 |
v0.7 | debug/configファイルが無いときにエラー出力 |
v0.6 | debug/いっぱい(動作確認) |
v0.5 | 整形済みテキスト対応(動作未確認) |
v0.4 | インライン型対応(動作未確認) |
v0.3 | ボタンの名前変更など対応 |
v0.2 | :configファイル対応 |
v0.1 | comment.inc.phpを利用して新規作成 |
バグ発見。1ページ内に複数の#addlineを使うと、&attachref;は、#addline内の&attachref;までカウントして場所を間違えます。場合によっては、#addline内の&attachref;まで置き換えてしまいます。これはどう対処したらよいのでしょうか???うまいこと、#addline内の&attachre;をquoteできればいいのですが、こういうときの一般的な方法はどうしたらよいのでしょうか?
同じバグが原因で、#addlineのbelowオプションは使わないで下さい。
「:config/plugin/addline/名前」とかで設定すればいいのかな?そうすれば複数行の追加を1度に出来るように書けるかもしれないし。。。でも、実装の仕方が分からない。。。
tracker.inc.phpを参考にして、そんな感じでやってみました。仕様変更。上のバグが解消したようです。
オプションでボタンに表示するテキストを指定できるようにしてはいかがでしょう。 :)
例えば・・・ btn:この上に行追加 とか。
こんな感じかな。(ついでに up と down も指定可能にしてあります。 :p )
$btn_text = $_addline_messages['btn_submit']; if ( func_num_args() ){ foreach ( func_get_args() as $opt ){ if ( $opt === 'above' || $opt === 'up' ){ $above = 1; } else if (preg_match("/btn:(.+)/i",$opt,$args)){ $btn_text = htmlspecialchars($args[1]); } else if ( $opt === 'below' || $opt === 'down' ){ $above = 0; } else { $configname = $opt; } } } $s_page = htmlspecialchars($vars['page']); $string = <<<EOD <form action="$script" method="post"> <div> <input type="hidden" name="addline_no" value="$addline_no" /> <input type="hidden" name="refer" value="$s_page" /> <input type="hidden" name="plugin" value="addline" /> <input type="hidden" name="above" value="$above" /> <input type="hidden" name="digest" value="$digest" /> <input type="hidden" name="configname" value="$configname" /> <input type="submit" name="addline" value="$btn_text" /> </div> </form> EOD;
追加してみました。addline.inc.php.3の動作確認をしてみてください(私は週末は動作確認できないので)。ついでに、submitボタンの左右のテキストもltext:<左テキスト>, rtext:<右テキスト>で指定できるようにしたつもりです。インライン型プラグインにするという手もあるんですけどね。
そうですね。ブロック型プラグインで呼び出したときは、フォームを表示して、インラインで呼び出したときは、テキストにリンクをつけるというのもいいかも。
&addline(パラメーター){テキスト}; というような感じかな。
というわけで作ってみました。addline.inc.php.4。例によって動作未確認です。
debugです。addline.inc.php.5を添付。整形済みテキスト対応。動作未確認。ちなみに、ブロック型とインライン型で動作を変えてしまいました。ブロック型が行の追加なのに対して、インライン型は行内のテキスト追加を意識しています。これで、また違った使い方が出来そうです。例えば、棒グラフ型の投票とか。
動作確認してdebugしました。addline.inc.php.6を御利用下さい。(これを機会に自分でPukiWIkiが使える環境を用意してみました。)
addline.inc.php.6 動きました。 config ペ-ジに該当ペ-ジが無いときの動作ですが 今は 何も起こらないですけど エラ-吐いた方がいいのかなぁ?
あ、エラーが出てませんね。plugin_xxx_convert()とplugin_xxx_action()ではreturnで返す値の型が違うんですね。エラー出力で失敗していたようです。というわけで、エラー出力のdebugして、addline.inc.php.7にしました。
インライン型で不具合発見。同じ行にある&addline;の順番がめちゃめちゃ。なぜ?左端から順に呼ばれるんじゃないのか?
症状がわかった。「{...}」で引数を書くと、インライン型の呼ばれる順番が変わるんだ!なんだそりゃ!?これだと、attachref.inc.phpでも同様の現象が起こってしまう!
この症状に関してはPukiWikiの問題で、「cvs:make_link.phpのv1.54以降」にて対応されました。「dev:BugTrack/441」を参照のこと。
addline.inc.php.8でインライン型でもabove,below指定が出来るようになりました。同じ行の位置に対して、クリックするリンクによって追加する内容を変えられます。
懸案事項としては、現在は文字列をそのままページに書き出しているけど、1回評価した結果をページに書き出すモードがあるといいかも。引数にevalとかつけて。呼び出される度に表記が変わるプラグインなどで、表記を固定することができるかと思って。randommes.inc.phpとか。
懸案事項2としては、自分自身を書き換えるoverride機能かな?押すと&addline;自身が指定した文字列と置き換わるのです。何かに使えるかな?
if (PKWK_READONLY || is_freeze($vars['page'])) { return; }
if (PKWK_READONLY || is_freeze($vars['refer')) { return array('msg' => 'err.', 'body' => "<p>freeze or READONLY</p>"); }