PukiWiki改造要領
概要:PukiWikiを改造するに当たっての備忘録です。
内容が正しいかは保証できませんが、私の調べた範囲でまとめてみました。
1. はじめに †
- ) プラグインの仕様
PukiwikiのHPのPukiWiki/Plug-inの仕様を参照して下さい。
- ) 開発チュートリアル
Sonots' PukiWiki プラグインの
PukiWikiプラグイン開発チュートリアルを参考にして下さい。
2. プラグインのタイプ †
プラグインのタイプ(関数)と簡単な説明です。詳細は上記PukiwikiのHPを参照して下さい。
- plugin_<プラグイン名>_convert()
インラインプラグインで行頭に「#プラグイン名」形式を書くことによって呼び出されます。
引数は func_get_args() で配列へ格納できます([0]~[n])
- plugin_<プラグイン名>_inline()
インラインプラグインで行頭、行中で「&プラグイン名;」形式で呼び出されます
引数は func_get_args() で配列へ格納できます([0]~[n])
- plugin_<プラグイン名>_action()
GET・POSTメソッドでpluginを指定されたときに呼び出されます。
- plugin_<プラグイン名>_init()
初期化関数。プラグインが呼び出されるとまず最初に実行されます。プラグイン実行毎ではなく、最初の呼び出し時にだけ実行されます。
3. パラメータ †
以下はプラグインの中で、パラメータを参照する方法です。
$arg_num = func_num_args();
$args = func_get_args();
$pre_uri = get_script_uri();
// forを使用した例
for ( $i = 0; $i < $arg_num; $i++ ) {
$option = $args[$i];
} // End of for
// foreachを使用した例
if (func_num_args() > 0) {
foreach (func_get_args() as $arg) {
$option = $arg;
}
}
以下の値を global でグローバル変数で参照することによって値を取得できます。
$script : スクリプトのurl ※get_script_uri() の使用を推奨します
$get : GETメソッドによるHTTPからの引数 ※$varsの使用を推奨します
$post : POSTメソッドによるHTTPからの引数 ※$varsの使用を推奨します
$vars : GET・POST両方のメソッドによるHTTPからの引数
$vars['page'] : 開いているページ名
4. PukiWikiの処理の流れ †
index.php
・lib(ライブラリーのディレクトリー)を設定 ← 設定の変更でライブラリーの切替えが可能。
↓
pukiwiki.phpをロード&実行
・各ライブラリーをロード&実行
func.php,plugin.php,html.php,convert_html.php,etc. ← expan.phpを追加する。
init.php.
pukiwiki.ini.phpをロード
PKWK_READONLY、PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK、
SKIN_DIR、$defaultpage、$auth_users、$agentsなどを設定
↓以下SKIN_FILEを設定するまでが複雑
$agents = array(array('pattern'=>'xxxxxxxxx', 'profile'=>'default'),);
'LANG_FILE_HINT', 'LANG_FILE'をロードする。
$user_agent['profile'] = isset($agent['profile']) ? $agent['profile'] : '';
define('UA_PROFILE', isset($user_agent['profile']) ? $user_agent['profile'] : '');
define('UA_INI_FILE', DATA_HOME . UA_PROFILE . '.ini.php');
require(UA_INI_FILE); ← default.ini.phpをロード
default.ini.php
define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'pukiwiki.skin.php');
・cmd,pluginの場合
do_plugin_action($plugin)でプラグインをロードして実行 ← plugin.php中
・プラグインの返り値$retvarから$body(本文部分)を取り出す。
・catbody($title, $page, $body); ← html.php中
ページの表示で使用する$_LINK配列変数のセット。
SKIN_FILEで設定されたSKINのモジュールを実行。 ← オリジナルはDATA_HOME/skin/pukiwiki.skin.php
SKIN_FILEでページを作成。
5.Wikiファイル †
- ) ファイル名
ページを編集したファイルはディレクトリーwikiの中にあります。
ファイル名一覧から分かるようにファイル名はページ名をbyteの数字変換したものに.txtの拡張子を付けたものです。
従ってファイル名を変更するとページ名も変わります。
- ) 差分(diff)
ページを編集するとその差分データがディレクトリーdiffに保存されます。内容は以下のようになっていてよくあるdiffの結果です。(例はUnderEditのページで文字を赤色から青色に変更したものです。)
-&color(red){編集中};
+&color(blue){編集中};
メニューから差分を削除するとこのファイルが削除されます。また、renameプラグインではファイル名を変更した時にこの差分のファイル名も変更しています。
- ) 凍結(freeze)
ファイルを凍結するとファイルの初めに#freezeという行が追加されます。ファイルが凍結されているかどうかチェックするには最初の行をチェックすればいい訳です。
これはライブラリーのfunc.phpの中のis_freeze()関数の中で処理されています。
使用することはないと思いますが、プラグインの中で使用する場合は、以下のようになります。
if (is_freeze($page)) {
処理;
}
Wikiファイルは#freezeの部分を除けば、編集ページのそのままの内容が保存されます。
(当然のことですが編集可能な状態の時は#freezeの行がありません。)