プラグイン開発者向け†
プラグインを開発してみようと思う方へのページです。(まだ目次にしかなっていません^_^;)
各種命名規則†
プラグイン名†
プラグインファイル名†
関数名†
定数名†
1.3から1.4で変更されている箇所†
UTIME†
1.3までは、UTIMEは、ローカルタイムを示していたが、1.4では、UTCとなっている。
UTIMEを利用しているプラグインは、注意して下さい。
インラインプラグイン†
推奨事項など†
主な内部関数†
とりあえず、使ったときに調べたものから。
1.4 系メインに書き直しました。
- lib/auth.php
- pkwk_login($pass)
- 入力文字列$pass が$adminpass と一致するかをチェック(1.4.4 以降, 1.5 系)
- check_editable($page)
- ページ名$page の編集認証をチェック(1.4 系, 1.5 系)
- check_readable($page)
- ページ名$page の閲覧認証をチェック(1.4 系, 1.5 系)
- get_auth_user()
- lib/convert_html.php
- convert_html($lines)
- 1行を1つの要素とする配列$lines をPukiWiki 形式からHTML に変換する(1.4 系, 1.5 系)
- convert_html($string)
- 文字列$string をPukiWiki 形式からHTML に変換する(1.3 系, 1.4 系, 1.5 系)
- lib/file.php
- get_source($page)
- ページの内容をソース状態で取得(1.3 系, 1.4 系, 1.5 系)
- page_write($page, $postdata)
- ページ名$page のソースを文字列$postdata で更新、同時にバックアップなども更新する(1.4 系, 1.5 系)
- 必ず事前にis_pagename() で不正なページ名でないかを確認してから、利用してください。
編集からは操作不可能なページを作成する事になってしまいます。
- lib/func.php
- is_pagename($str)
- 文字列$str が有効なページ名であるかどうか(1.3 系, 1.4 系, 1.5 系)
- is_page($page)
- ページ名$page が存在するかどうか(1.3 系, 1.4 系, 1.5 系)
- $page が有効なページ名であるかどうかのチェックは、別途行う必要がある
- is_editable($page)
- ページ名$page が編集可能かどうかを、「ページ名が有効であるか」と「編集不可ページに指定されていないか」から判定(1.3 系, 1.4 系, 1.5 系)
- 1.4 系ではページが凍結されているかも判定条件に追加されている
- strip_bracket($str)
- [[ページ名]] からBracket部分を取り除き、ページ名を得る(1.3 系, 1.4 系, 1.5 系)
- htmlsc($string, $flags, $charset)
- 変換に用いるデフォルトの文字コードがUTF-8やdefault_charset設定に変更された、htmlspecialchars 関数用の互換ラッパーです(1.5 系) → BugTrack2/355
- GREPによる検索・置き換えで簡単に互換動作できるよう、htmlspecialchars() → htmlsc() とした場合の$flags と$charset 初期値は、過去のバージョン準拠に近づくよう設定されています。(本体設定と異なる文字コードを扱う可能性がある場合は、置き換えだけでなく文字コードを明示指定する必要があります)
- 将来のバージョンでデフォルト動作が変更となっても問題がないよう、ソースコードでは$flags と$charset を可能な限り明示的に呼び出す事をお勧めします。
- lib/make_link.php
- make_link($string, $page = '')
- 文字列$string からPukiWiki のインライン要素(各種リンクやユーザ定義ルールなど)のみを展開して、HTML に変換する(1.4 系, 1.5 系)
- $page には相対リンクの基準となるページ名を指定(省略された場合は、$vars['page'] を利用しようとします)
- make_pagelink($page)
- ページ名$page へのリンクを作成(1.4 系, 1.5 系)
- 事前にis_pagename() で不正なページ名でないかを確認してから、利用してください
- get_fullname($name, $refer)
- ページ名$name が相対参照であった場合、基準ページ$refer から絶対参照を得る(1.3.3 以降, 1.4 系, 1.5 系)
- lib/html.php
- strip_htmltag($str)
- 文字列$str から全てのHTML タグを消去します(1.3 系, 1.4 系, 1.5 系)
- 過去に無効化できるバグがあった経緯から、PukiWikiのコードは PHP のstrip_tags() を意図的に避けるように作られています。
- lib/plugin.php
- exist_plugin($name)
- プラグイン名$name 用のファイルが存在すればrequire_once() (1.4 系, 1.5 系)
- 1.4.6 以降require 回数制限チェックあり。
自作プラグイン等から既存のプラグインをrequire_onceやinclude_onceしているものがちょくちょくあるが、代わりにこのexist_pluginを使うべきか。
(関連話題: BugTrack2/116)
補足情報†
- BugTrack2/213 グローバル変数 $scriptは参照せず、get_script_uri() を使用することを推奨
- リダイレクトする場合は絶対パスである事が必須なので、必ずget_script_uri() を使用してください
- ファイル所有者の自動修正を行う関数が、PukiWiki の標準関数に追加されました
過去の情報†
関数名・グローバル変数名(案)†
プラグインは、PukiWiki 配下で稼動するため、本体に影響を及ぼさないために、
関数名およびグローバル変数名の命名には、注意が必要となる。
プラグイン内で利用するプライベート関数であっても、プラグインを開発する
際には、無用な混乱や、今後の本体開発・プラグイン開発の負荷を軽減する上でも、
これら命名には、プラグイン名をプレフィックスとして付加することを推奨する。
1つの PHP のシステムとしては、命名規則を明確に定めないと、これら名前においては、
コンフリクトし、稼動しないこととなる。
リンク集†
- PHPXref - クロスリファレンスドキュメントの自動生成
- http://www.pat.hi-ho.ne.jp/dimension/tips/tips_phpxref.shtml