開始行: * PukiWikiのPlug-inの仕様 [#s580f695] #contents ** プラグインディレクトリについて [#lbd4307f] PukiWikiのページのHTMLへのコンバート時と、プラグイン機能... ** ページ内でのプラグインの呼び出し [#k4c6b23d] #プラグイン名 #プラグイン名(arg1,arg2...) -行頭にスペースは含めることはできない -引数内に括弧()を使用することができる。ただし ) 単体は不可 -引数を指定しなくても呼び出せる 実際には プラグインディレクトリ/プラグイン名.inc.php 内の... &プラグイン名(引数リスト); &プラグイン名(引数リスト){[文字列]}; -文中で呼び出すことができる 実際には プラグインディレクトリ/プラグイン名.inc.php 内の... ** URL指定でのプラグインの呼び出し [#fc1ea1a3] pukiwiki.php?plugin=プラグイン名 実際には プラグインディレクトリ/プラグイン名.inc.php 内の... ** ファイル名 [#e7e361d0] <プラグイン名>.inc.php **関数 [#n3b77c9b] ***function plugin_<プラグイン名>_convert() [#c15ce114] -#プラグイン名形式で呼び出されます -HTMLへのコンバート時に呼び出されます -引数は func_get_args() で配列へ格納できます([0]~[n]) -func_num_args() によって、渡された引数の数を求めることが... ***function plugin_<プラグイン名>_inline() [#w20d2860] -&プラグイン名;形式で呼び出されます -HTMLへのコンバート時に呼び出されます -引数は func_get_args() で配列へ格納できます([0]~[n]) -func_num_args() によって、渡された引数の数を求めることが... 但し、 &hoge(引数リスト); 形式と &hoge(引数リスト){[文字列]}; 形式の互換のため、function plugin_プラグイン名_inline()で... ***function plugin_<プラグイン名>_action() [#xd85d57c] -GET・POSTメソッドでpluginを指定されたときに呼び出されます //-返値に array("msg" => "$1 is page") などを返すと $1 を... -返値に array("msg" => "page's name", "body" => "contents... -die() を実行することにより、ページに戻らないようになりま... ***function plugin_<プラグイン名>_init() [#w39f6235] -初期化関数。プラグインが呼び出されるとまず最初に実行され... $messages ハッシュ配列を設定し、set_plugin_messages($mess... function plugin_<プラグイン名>_init() { $messages['_<プラグイン名>_messages'] = array( 'msg_title' => '<p>メッセージ:%s</p>', 'err' => <p>エラー:%s</p>); set_plugin_messages($messages); } この例では、$_<プラグイン名>_messages という名前の global... 値は $messages['_<プラグイン名>_messages'] で設定したもの... plugin_<プラグイン名>_convert() などの関数中では global $_<プラグイン名>_messages; のように宣言して使用します。 $_<プラグイン名>_messages['msg_title'] のようにしてアクセ... ja.lng, en.lng で設定するような値をダウンロードするユーザ... ** ファイル内容 [#vcbd181a] ユーザに設定させる初期値などについては、define で定義して... コンバート時のGET・POSTの出力内容に必要なものは refer と ... > refer : そのページの名前($vars["page"])~ plugin : プラグイン名 とします。 以下の値を global でグローバル変数にすることによって値を... $script : スクリプト名 $get : GETメソッドによるHTTPからの引数 ※$varsの使用... $post : POSTメソッドによるHTTPからの引数 ※$varsの使用... $vars : GET・POST両方のメソッドによるHTTPからの引数 $vars["page"] : 開いているページ名 (strip_bracket関数により[[]]を取り除かれている) *** 1.4系プラグイン作成時の注意 [#jb35af56] PukiWiki1.4にはアクセス制御が組み込まれているため、プラグ... 詳しくは [http://pukiwiki.sourceforge.jp/dev/?PukiWiki%2F... プラグインの中でJavaScriptなどを記述するために<script>タ... *** クロスサイトスクリプティング(XSS) [#qde01ef9] func_get_args()でプラグインに渡される引数はサニタイズされ... // ウソついていたら直修正してください。 ただし、インライン型プラグインの場合、{ }内の文字列はサニ... &plugin(foo){bar}; 形式の bar を得るには、 $args = func_get_args(); $bar = array_pop($args); // サニタイズ済み。そのままHTML... のようにします。 barが省略された &plugin(foo); の場合でも、$barには空の文字列が入ります([[上記>#n3b77c9b... ***1.4用プラグイン作成時の注意(part2) [#t4d87ee0] ~1.4用のプラグインもしくはスキンで、amazonアソシエートに... +<iframe>を<object>に置き換える必要があります。src="..."... +属性値の中の&を&amp;に書き換える必要があります。属性... +<map>タグのname属性をid属性に変更する必要があります。 +<area>タグ、<img>タグなどを<area ... /><img ... />のよう... +<img>タグ、<area>タグにalt属性を追加する必要があります。... +クライアントサイドイメージマップを指定する<img>のusemap... -amazonアソシエーションで表示されたサンプル #expand(400){{{ <iframe scrolling="no" frameborder=0 width=120 height=6... <table border="0" cellpadding="0" cellspacing="0" width... <tr><td> <MAP NAME="boxmap11"> <AREA SHAPE="RECT" COORDS="4,584,115,600" HREF="http://... <AREA COORDS="0,0,10000,10000" HREF="http://www.amazon.... </MAP> <img src="http://rcm-images.amazon.com/images/G/09/extr... </td></tr> </table> </iframe> }}} ~これをPukiWiki 1.4用に書き換えると次のようになります。 -スキンに導入したサンプル #expand(400){{{ #code(php){{ <?php if (ereg("MSIE (3|4|5|6)", HTTP_USER_AGENT) == FAL... <object width="121" height="602" style="margin-left:auto... <?php } else { ?> <object width="140" height="620" style="margin-left:auto... <?php } ?> <table border="0" cellpadding="0" cellspacing="0" summ... <tr><td> <map id="boxmap11"> <area shape="rect" coords="4,584,115,600" href="... <area coords="0,0,10000,10000" href="http://www.... </map> <img src="http://rcm-images.amazon.com/images/G/09... </td></tr> </table> </object> }} }}} ~<iframe>を<object>に書き換えるとき、widthとheightの値を... ~ここではIEとその他のブラウザで条件分けしていますが、CSS... #expand(500){{{ <object type="text/html" data="http://rcm-jp.amazon.co.j... }}} ~ただし、Internet Explorerの<object>にはバグがあり、<obje... *** 1.4系(1.4.4rc1~)プラグイン作成時の注意(part3) [#a3e4... ~独自プラグイン等での管理者パスワードのチェックはpkwk_log... *** pukiwiki 用の javascript を作成する際に考慮すべきブラ... もともとPukiWiki 1.3.2からNetscape 4.xやIE4などには対応し... 終了行: * PukiWikiのPlug-inの仕様 [#s580f695] #contents ** プラグインディレクトリについて [#lbd4307f] PukiWikiのページのHTMLへのコンバート時と、プラグイン機能... ** ページ内でのプラグインの呼び出し [#k4c6b23d] #プラグイン名 #プラグイン名(arg1,arg2...) -行頭にスペースは含めることはできない -引数内に括弧()を使用することができる。ただし ) 単体は不可 -引数を指定しなくても呼び出せる 実際には プラグインディレクトリ/プラグイン名.inc.php 内の... &プラグイン名(引数リスト); &プラグイン名(引数リスト){[文字列]}; -文中で呼び出すことができる 実際には プラグインディレクトリ/プラグイン名.inc.php 内の... ** URL指定でのプラグインの呼び出し [#fc1ea1a3] pukiwiki.php?plugin=プラグイン名 実際には プラグインディレクトリ/プラグイン名.inc.php 内の... ** ファイル名 [#e7e361d0] <プラグイン名>.inc.php **関数 [#n3b77c9b] ***function plugin_<プラグイン名>_convert() [#c15ce114] -#プラグイン名形式で呼び出されます -HTMLへのコンバート時に呼び出されます -引数は func_get_args() で配列へ格納できます([0]~[n]) -func_num_args() によって、渡された引数の数を求めることが... ***function plugin_<プラグイン名>_inline() [#w20d2860] -&プラグイン名;形式で呼び出されます -HTMLへのコンバート時に呼び出されます -引数は func_get_args() で配列へ格納できます([0]~[n]) -func_num_args() によって、渡された引数の数を求めることが... 但し、 &hoge(引数リスト); 形式と &hoge(引数リスト){[文字列]}; 形式の互換のため、function plugin_プラグイン名_inline()で... ***function plugin_<プラグイン名>_action() [#xd85d57c] -GET・POSTメソッドでpluginを指定されたときに呼び出されます //-返値に array("msg" => "$1 is page") などを返すと $1 を... -返値に array("msg" => "page's name", "body" => "contents... -die() を実行することにより、ページに戻らないようになりま... ***function plugin_<プラグイン名>_init() [#w39f6235] -初期化関数。プラグインが呼び出されるとまず最初に実行され... $messages ハッシュ配列を設定し、set_plugin_messages($mess... function plugin_<プラグイン名>_init() { $messages['_<プラグイン名>_messages'] = array( 'msg_title' => '<p>メッセージ:%s</p>', 'err' => <p>エラー:%s</p>); set_plugin_messages($messages); } この例では、$_<プラグイン名>_messages という名前の global... 値は $messages['_<プラグイン名>_messages'] で設定したもの... plugin_<プラグイン名>_convert() などの関数中では global $_<プラグイン名>_messages; のように宣言して使用します。 $_<プラグイン名>_messages['msg_title'] のようにしてアクセ... ja.lng, en.lng で設定するような値をダウンロードするユーザ... ** ファイル内容 [#vcbd181a] ユーザに設定させる初期値などについては、define で定義して... コンバート時のGET・POSTの出力内容に必要なものは refer と ... > refer : そのページの名前($vars["page"])~ plugin : プラグイン名 とします。 以下の値を global でグローバル変数にすることによって値を... $script : スクリプト名 $get : GETメソッドによるHTTPからの引数 ※$varsの使用... $post : POSTメソッドによるHTTPからの引数 ※$varsの使用... $vars : GET・POST両方のメソッドによるHTTPからの引数 $vars["page"] : 開いているページ名 (strip_bracket関数により[[]]を取り除かれている) *** 1.4系プラグイン作成時の注意 [#jb35af56] PukiWiki1.4にはアクセス制御が組み込まれているため、プラグ... 詳しくは [http://pukiwiki.sourceforge.jp/dev/?PukiWiki%2F... プラグインの中でJavaScriptなどを記述するために<script>タ... *** クロスサイトスクリプティング(XSS) [#qde01ef9] func_get_args()でプラグインに渡される引数はサニタイズされ... // ウソついていたら直修正してください。 ただし、インライン型プラグインの場合、{ }内の文字列はサニ... &plugin(foo){bar}; 形式の bar を得るには、 $args = func_get_args(); $bar = array_pop($args); // サニタイズ済み。そのままHTML... のようにします。 barが省略された &plugin(foo); の場合でも、$barには空の文字列が入ります([[上記>#n3b77c9b... ***1.4用プラグイン作成時の注意(part2) [#t4d87ee0] ~1.4用のプラグインもしくはスキンで、amazonアソシエートに... +<iframe>を<object>に置き換える必要があります。src="..."... +属性値の中の&を&amp;に書き換える必要があります。属性... +<map>タグのname属性をid属性に変更する必要があります。 +<area>タグ、<img>タグなどを<area ... /><img ... />のよう... +<img>タグ、<area>タグにalt属性を追加する必要があります。... +クライアントサイドイメージマップを指定する<img>のusemap... -amazonアソシエーションで表示されたサンプル #expand(400){{{ <iframe scrolling="no" frameborder=0 width=120 height=6... <table border="0" cellpadding="0" cellspacing="0" width... <tr><td> <MAP NAME="boxmap11"> <AREA SHAPE="RECT" COORDS="4,584,115,600" HREF="http://... <AREA COORDS="0,0,10000,10000" HREF="http://www.amazon.... </MAP> <img src="http://rcm-images.amazon.com/images/G/09/extr... </td></tr> </table> </iframe> }}} ~これをPukiWiki 1.4用に書き換えると次のようになります。 -スキンに導入したサンプル #expand(400){{{ #code(php){{ <?php if (ereg("MSIE (3|4|5|6)", HTTP_USER_AGENT) == FAL... <object width="121" height="602" style="margin-left:auto... <?php } else { ?> <object width="140" height="620" style="margin-left:auto... <?php } ?> <table border="0" cellpadding="0" cellspacing="0" summ... <tr><td> <map id="boxmap11"> <area shape="rect" coords="4,584,115,600" href="... <area coords="0,0,10000,10000" href="http://www.... </map> <img src="http://rcm-images.amazon.com/images/G/09... </td></tr> </table> </object> }} }}} ~<iframe>を<object>に書き換えるとき、widthとheightの値を... ~ここではIEとその他のブラウザで条件分けしていますが、CSS... #expand(500){{{ <object type="text/html" data="http://rcm-jp.amazon.co.j... }}} ~ただし、Internet Explorerの<object>にはバグがあり、<obje... *** 1.4系(1.4.4rc1~)プラグイン作成時の注意(part3) [#a3e4... ~独自プラグイン等での管理者パスワードのチェックはpkwk_log... *** pukiwiki 用の javascript を作成する際に考慮すべきブラ... もともとPukiWiki 1.3.2からNetscape 4.xやIE4などには対応し... ページ名: