RIGHT:&size(12){Category:[[:Plugin]] [[:CategoryDev]], [[:Category_Document]]};

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

-----
#contents
-----
**関連 [#gc343d2e]
-[[PukiWiki/技術資料]]
--[[PukiWiki/Plug-inの仕様]]
--[[PukiWiki/CSSのclass一覧]]
--[[PukiWiki/関数一覧表]]

-[[PukiWiki/1.4/プラグイン開発を便利に]]
-[[PukiWiki/1.4/Proxy]]
-[[BugTrack/779]] : (PHPのコードの)クリンナップのまとめ


**各種命名規則 [#n5c6aa2f]
***プラグイン名 [#a8535462]
-[[PukiWiki/Plug-inの仕様>PukiWiki/Plug-inの仕様#q1f6de34]]

***プラグインファイル名 [#q14eace5]
-[[PukiWiki/Plug-inの仕様>PukiWiki/Plug-inの仕様#k4a8a55f]]

***関数名 [#zfd2c104]
-[[PukiWiki/Plug-inの仕様>PukiWiki/Plug-inの仕様#z3423080]]

***定数名 [#lb1c6171]
-[[BugTrack2/29>BugTrack2/29#zd28eeb6]]

***関数名・グローバル変数名(案) [#k017d75b]
プラグインは、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()  */ }
こうしておけば名前空間が独立するので、本体とのしがらみを多少軽減できるかな、と。 -- [[ぱんだ]] SIZE(10){2003-02-24 (月) 18:39:59}

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

**&aname(changes);1.3から1.4で変更されている箇所 [#zc1e39f5]

***UTIME [#l5b11d6b]
1.3までは、UTIMEは、ローカルタイムを示していたが、1.4では、UTCとなっている。
UTIMEを利用しているプラグインは、注意して下さい。
-[[BugTrack/169]]
-[[BugTrack2/76]]
***インラインプラグイン [#s0ec5068]
-[[PukiWiki/1.4/InlinePlugin]]
-[[PukiWiki/Plug-inの仕様]]

*** Plugin開発者向け、主な内部関数 [#v4d76a2e]
** 推奨事項など [#k07763bb]
- PukiWiki/Plug-inの仕様
-- [[GET, POST メソッドの入出力パラメータ名に関する制限>PukiWiki/Plug-inの仕様#]]
-- [[内部で予約しているグローバル変数など>PukiWiki/Plug-inの仕様#]]
-- [[PukiWiki本体の重要な定義など>PukiWiki/Plug-inの仕様#]]

*** 主な内部関数 [#v4d76a2e]
とりあえず、使ったときに調べたものから。~
1.4 系メインに書き直しました。
-詳細: [[PukiWiki/関数一覧表]]

:lib/auth.php|
-- pkwk_login($pass)
--- $pass が$adminpass と一致するかをチェック(1.4.4 以降)
--- 入力文字列$pass が$adminpass と一致するかをチェック(1.4.4 以降, 1.5 系)
-- check_editable($page)
--- ページ名$page の編集認証をチェック(1.4 系)
--- ページ名$page の編集認証をチェック(1.4 系, 1.5 系)
-- check_readable($page)
--- ページ名$page の閲覧認証をチェック(1.4 系)
--- ページ名$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行を1つの要素とする配列$lines をPukiWiki 形式からHTML に変換する(1.4 系, 1.5 系)
-- convert_html($string)
--- 文字列$string をPukiWiki 形式からHTML に変換する(1.3 系, 1.4 系)
--- 文字列$string をPukiWiki 形式からHTML に変換する(1.3 系, 1.4 系, 1.5 系)
:lib/file.php|
-- get_source($page)
--- ページの内容をソース状態で取得(1.3 系, 1.4 系)
--- ページの内容をソース状態で取得(1.3 系, 1.4 系, 1.5 系)
-- page_write($page, $postdata)
--- ページ名$page のソースを文字列$postdata で更新、同時にバックアップなども更新する(1.4 系)
--- ページ名$page のソースを文字列$postdata で更新、同時にバックアップなども更新する(1.4 系, 1.5 系)
--- 必ず事前にis_pagename() で不正なページ名でないかを確認してから、利用してください。&br;編集からは操作不可能なページを作成する事になってしまいます。
:lib/func.php|
-- is_pagename($str)
--- 文字列$str が有効なページ名であるかどうか(1.3 系, 1.4 系)
--- 文字列$str が有効なページ名であるかどうか(1.3 系, 1.4 系, 1.5 系)
-- is_page($page)
--- ページ名$page が存在するかどうか(1.3 系, 1.4 系)
--- ページ名$page が存在するかどうか(1.3 系, 1.4 系, 1.5 系)
--- $page が有効なページ名であるかどうかのチェックは、別途行う必要がある
-- is_editable($page) 
--- ページ名$page が編集可能かどうかを、「ページ名が有効であるか」と「編集不可ページに指定されていないか」から判定(1.3 系, 1.4 系)
--- ページ名$page が編集可能かどうかを、「ページ名が有効であるか」と「編集不可ページに指定されていないか」から判定(1.3 系, 1.4 系, 1.5 系)
--- 1.4 系ではページが凍結されているかも判定条件に追加されている
-- strip_bracket($str)
--- ''[[ページ名]]'' からBracket部分を取り除き、''ページ名''を得る(1.3 系, 1.4 系)
--- ''[[ページ名]]'' からBracket部分を取り除き、''ページ名''を得る(1.3 系, 1.4 系, 1.5 系)
-- htmlsc($string, $flags, $charset)
--- 変換に用いるデフォルトの文字コードがUTF-8やdefault_charset設定に変更された、[[htmlspecialchars 関数>PHP関数:htmlspecialchars]]用の互換ラッパーです(1.5 系) → [[BugTrack2/355>BugTrack2/355#lb1b06b4]]
--- GREPによる検索・置き換えで簡単に互換動作できるよう、htmlspecialchars() → htmlsc() とした場合の$flags と$charset 初期値は、過去のバージョン準拠に近づくよう設定されています。(本体設定と異なる文字コードを扱う可能性がある場合は、置き換えだけでなく文字コードを明示指定する必要があります)
--- 将来のバージョンでデフォルト動作が変更となっても問題がないよう、ソースコードでは$flags と$charset を可能な限り明示的に呼び出す事をお勧めします。
:lib/make_link.php|
-- make_link($string, $page = '')
--- 文字列$string から[[PukiWiki のインライン要素>FormattingRules#l7110f11]](各種リンクやユーザ定義ルールなど)のみを展開して、HTML に変換する(1.4 系)
--- 文字列$string から[[PukiWiki のインライン要素>FormattingRules#l7110f11]](各種リンクやユーザ定義ルールなど)のみを展開して、HTML に変換する(1.4 系, 1.5 系)
--- $page には相対リンクの基準となるページ名を指定(省略された場合は、$vars['page'] を利用しようとします)
-- make_pagelink($page)
--- ページ名$page へのリンクを作成(1.4 系)
--- ページ名$page へのリンクを作成(1.4 系, 1.5 系)
--- 事前にis_pagename() で不正なページ名でないかを確認してから、利用してください
-- get_fullname($name, $refer)
--- ページ名$name が相対参照であった場合、基準ページ$refer から絶対参照を得る(1.3.3 以降, 1.4 系)
--- ページ名$name が相対参照であった場合、基準ページ$refer から絶対参照を得る(1.3.3 以降, 1.4 系, 1.5 系)
:lib/html.php|
-- strip_htmltag($str)
--- 文字列$str から全てのHTML タグを消去します(1.3 系, 1.4 系)
--- 文字列$str から全てのHTML タグを消去します(1.3 系, 1.4 系, 1.5 系)
--- 過去に無効化できるバグがあった経緯から、PukiWikiのコードは PHP のstrip_tags() を意図的に避けるように作られています。
:lib/plugin.php|
-- exist_plugin($name)
--- プラグイン名$name 用のファイルが存在すればrequire_once() (1.4 系)
--- プラグイン名$name 用のファイルが存在すればrequire_once() (1.4 系, 1.5 系)
--- 1.4.6 以降require 回数制限チェックあり。&br;自作プラグイン等から既存のプラグインをrequire_onceやinclude_onceしているものがちょくちょくあるが、代わりにこのexist_pluginを使うべきか。&br;(関連話題: [[BugTrack2/116]])

**補足情報 [#n0c3f832]
-[[BugTrack2/213>BugTrack2/213#hb0abc89]] グローバル変数 $scriptは参照せず、get_script_uri() を使用することを推奨
-- リダイレクトする場合は絶対パスである事が必須なので、必ずget_script_uri() を使用してください

-ファイル所有者の自動修正を行う関数が、PukiWiki の標準関数に追加されました
--[[BugTrack2/55]]

**過去の情報 [#hd338007]

***関数名・グローバル変数名(案) [#k017d75b]
プラグインは、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()  */ }
こうしておけば名前空間が独立するので、本体とのしがらみを多少軽減できるかな、と。 -- [[ぱんだ]] SIZE(10){2003-02-24 (月) 18:39:59}

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


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.032 sec.

SourceForge