プラグイン開発者向け

プラグインを開発してみようと思う方へのページです。(まだ目次にしかなっていません^_^;)



関連

各種命名規則

プラグイン名

プラグインファイル名

関数名

定数名

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()
    • ログイン中のユーザー名を得る(1.5.1 以降) → BugTrack2/375
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 のシステムとしては、命名規則を明確に定めないと、これら名前においては、 コンフリクトし、稼動しないこととなる。

  • 非互換ついでに、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

リンク集

  • PHPXref - クロスリファレンスドキュメントの自動生成
    • http://www.pat.hi-ho.ne.jp/dimension/tips/tips_phpxref.shtml

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-02-24 (水) 21:24:29
Site admin: PukiWiki Development Team

PukiWiki 1.5.1+ © 2001-2016 PukiWiki Development Team. Powered by PHP 5.6.30-0+deb8u1. HTML convert time: 0.734 sec.

OSDN