plugin memo Edit

  • ちょっとPlus!に書き込まれていた記事をコピペ (^Q^
    プラグイン既定される関数名戻り値
    プラグイン初期化function plugin_XXX_init()void
    ブロック型function plugin_XXX_convert()string本文
    インライン型function plugin_XXX_inline()string本文
    アクションfunction plugin_XXX_action()array'msg'=>'タイトル','body'=>'本文'

PukiWiki公式より

Plugin開発者向け、主な内部関数 Edit

関数内容
func_get_args()引数で定義したオプションを配列へ格納できます([0]~[n])
func_num_args()渡された引数の数を求めることができます
get_source($page)ページの内容をソース状態で取得
is_editable($page)ページが編集可能かどうか
is_page($page,$reload=FALSE)ページが存在するかどうか。$page がページ名かどうかのチェックはなさげ。
is_pagename($str)文字列がページ名かどうか
make_pagelink($page,$alias=,$anchor=,$refer='')ページへのリンクを作成
strip_bracket($str)[[ や ]] で囲まれたページ名から、Bracket部分を取り除く

値をglobal(グローバル変数)で定義して取得できる変数 Edit

$scriptスクリプト名、ここなら(http://taru.s223.com/index.php
$getGETメソッドによるHTTPからの引数 ※$varsの使用を推奨します
$postPOSTメソッドによるHTTPからの引数 ※$varsの使用を推奨します
$varsGET・POST両方のメソッドによるHTTPからの引数
$vars["page"]開いているページ名

アクセス制御用の関数仕様 Edit

  • check_readable($page, $auth_flag=true, $exit_flag=true)
    • 閲覧することができるかチェックする。
    • 今のところread_authと全く同じ。内部でread_authのみを呼び出している。
  • check_editable($page, $auth_flag=true, $exit_flag=true)
    • 編集することができるかチェックする。
    • edit_auth+凍結などのチェックをする場合。
  • read_auth($page, $auth_flag=true, $exit_flag=true)
    • 閲覧権限があるかチェックする。
  • edit_auth($page, $auth_flag=true, $exit_flag=true)
    • 編集権限があるかチェックする。


引数説明
$pageページ名文字列
$auth_flagtrue: 現在のログイン状態で認証NGであれば、BASIC認証発動(デフォルト)
false:現在のログイン状態で判断するだけ
$exit_flagtrue: 認証NGの場合、check_xxxable関数側でNG画面に遷移する(デフォルト)
false:認証NGの場合でも、戻り値falseで戻ってくるだけ


戻り値true: 認証OK
false:認証NG
  • get_source, file関数を使用している全てのプラグインで、 以下の関数による事前チェックを行うように改造しなければ、 そこがセキュリティホールになるので注意!!
  • 使わないプラグインはpukiwiki/plugin/disableディレクトリを作って そこに入れておくなどして、無効化すると良い。
  • check_xxxxable系とxxx_auth系の使い分けは、特に問題がなければ、総合的な 観点で読めるか書けるかを判断しているcheck_xxxx系の方を利用する方がよいと思う。
  • 第2、第3引数のデフォルト値は既存プラグインとの互換性のために用意している。 今後プラグインを実装する場合は明示的に指定した方がよいと思う。

関数名・グローバル変数名(案) Edit

プラグインは、PukiWiki 配下で稼動するため、本体に影響を及ぼさないために、 関数名およびグローバル変数名の命名には、注意が必要となる。 プラグイン内で利用するプライベート関数であっても、プラグインを開発する 際には、無用な混乱や、今後の本体開発・プラグイン開発の負荷を軽減する上でも、 これら命名には、プラグイン名をプレフィックスとして付加することを推奨する。

1つの PHP のシステムとしては、命名規則を明確に定めないと、これら名前においては、 コンフリクトし、稼動しないこととなる。

  • 非互換ついでに、PukiWiki/1.4でプラグインをクラス化してしまおうかと考えています。
    class Plugin_xxx {
      var $...                /* define()していた定数やその他の変数など */
      function Plugin_xxx() { /* plugin_xxx_init()    */ }
      function action()     { /* plugin_xxx_action()  */ }
      function convert()    { /* plugin_xxx_convert() */ }
      function inline()     { /* plugin_xxx_inline()  */ }
    こうしておけば名前空間が独立するので、本体とのしがらみを多少軽減できるかな、と。 -- ぱんだ? 2003-02-24 (月) 18:39:59

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS