PukiWiki が 1.4.4 で中身が整理されたので、改めて自分用にまとめたついでにここに置いておきます。
Wiki そのものについては説明する気はありません。結城さんのWiki入門の第1章が PDF で読めますのでまずはこれを読んでください。できれば自由に参加できる Wiki を見つけて練習するのがいちばんなのですが、普通はちょっと気後れするでしょう。
本にも書いてありますが、Wiki をレンタルできるサービスもあるのでまずどんなものかを知りたければそういったサービスを利用するのも手です。
First Edition: 2004-12
具体的な設定方法は pukiwiki.ini.php のところを参照のこと。
PukiWiki は以下のようなディレクトリ構成で配布されている。
. |-- attach |-- backup |-- cache | `-- entities.dat |-- counter |-- default.ini.php |-- diff |-- en.lng |-- image | `-- face |-- index.php |-- ja.lng |-- keitai.ini.php |-- lib |-- plugin |-- pukiwiki.ini.php |-- pukiwiki.php |-- rules.ini.php |-- skin |-- trackback `-- wiki
で、これをとりあえず
場所に展開するだけで動く。この構造を変えたい場合は pukiwiki.ini.php で設定する。
普通、CGI スクリプトのドキュメントにはブラウザから見えない場所にデータ類を置けとこういう設定にしろと書いてある。しかし Wiki はもともと情報を共有するためのものであるからか、あまりそういう設定にうるさい説明を読んだことはない。やるとすればこんな感じか。
. |-- data | |-- attach | |-- backup | |-- cache | |-- diff | `-- wiki `-- pukiwiki_pub |-- image |-- lib |-- plugin `-- skin
これは絶対に便利だと思う。Wiki 上の文書が増えてくると、案外整理しにくいというか扱いにくいというか、これはさすがに分類した方がいいなぁと思えてくる。このとき
など、Wiki によってできることとできないことがあるが、おおむね上のような機能を使って整理することなると思う。しかしいちばん大胆でシンプルでしかし基本的な機能だけで実現できる整理方法は Wiki を分割してしまうことである。必要なら InterWikiName を利用してうまく結びつけてやればよい。
WikiFarm の機能があればそれを利用するのがいちばん簡単なんだけど。
. |-- modules | |-- lib こっちでまとめても | `-- plugin いいし `-- pukiwiki_pub |-- image |-- lib ここで |-- plugin まとめてもいい |-- skin |-- wikiA |-- wikiB |-- wikiC `-- wikiD
私は以下のように設定しておくべきだと思っています。
ということで index.php の中身は
<?php include( 'pukiwiki.php' ); ?>
にしておく。
// データ格納ディレクトリ define('DATA_DIR', DATA_HOME . 'wiki/'); // 最新のデータ define('DIFF_DIR', DATA_HOME . 'diff/'); // 差分ファイル define('BACKUP_DIR', DATA_HOME . 'backup/'); // バックアップ define('CACHE_DIR', DATA_HOME . 'cache/'); // キャッシュ define('UPLOAD_DIR', DATA_HOME . 'attach/'); // 添付ファイル define('COUNTER_DIR', DATA_HOME . 'counter/'); // カウンタ define('TRACKBACK_DIR', DATA_HOME . 'trackback/'); // TrackBack define('PLUGIN_DIR', DATA_HOME . 'plugin/'); // プラグインファイル
せっかく 1.4.4 でまとまった lib ディレクトリについて、場所を指定することができない。しかしこの lib ディレクトリの内容は
ので、複数の Wiki で共用できた方が嬉しい。設定項目がないので plugin ディレクトリと一緒にしておいて、PLUGIN_DIR を利用するのが吉。例えば FreeBSD 的には
/usr/local/share/pukiwiki/lib/ /usr/local/share/pukiwiki/plugin/
な辺りになると思う。Windows だったら
C:\pukiwiki\lib 共通部品 C:\pukiwiki\plugin D:\wiki データ
みたいな構成もアリかと。また、必要ならこれも
define('IMAGE_DIR', 'image/');
定義しておく。
以下のようにすべし。
list( $script, $query ) = split( '\?', $_SERVER['REQUEST_URI'] );
以下は好みの問題と、印刷用 CSS を作るときの都合により設定したものです。
// 雛形とするページの読み込みを表示させる $load_template_func = 0;
負荷になるので外す。
// 関連するリンクを常に表示する(負担がかかります) $related_link = 0;
負荷になるしページが増えると見にくいので外す。
// $_ul_left_margin = 0; // リストと画面左端との間隔(px) // $_ul_margin = 16; // リストの階層間の間隔(px) // $_ol_left_margin = 0; // リストと画面左端との間隔(px) // $_ol_margin = 16; // リストの階層間の間隔(px) // $_dl_left_margin = 0; // リストと画面左端との間隔(px) // $_dl_margin = 16; // リストの階層間の間隔(px) // $_list_pad_str = ' class="list%d" style="padding-left:%dpx;margin-left:%dpx"'; $_list_pad_str = ' class="list%d"';
ピクセル単位で指定してしまうのは感心しないのでこれを外す。
// 大・小見出しから目次へ戻るリンクの文字 //$top = $_msg_content_back_to_top;
見出しから戻れるのはちょっと妙な感じがする(仕方ないとは思うけど)のでこれを外す。
各種設定がファイルの先頭辺りで行えるようになった。
// Max file size for upload on script of PukiWikiX_FILESIZE define('MAX_FILESIZE', (1024 * 1024 * 10)); // default: 1MB
// ファイルのアクセス権 define('ATTACH_FILE_MODE', 0644); //define('ATTACH_FILE_MODE', 0604); // for XREA.COM
group の permission を落とさなきゃいけないところは案外あるような気がする。
添付ファイルの mime type は :config/plugin/attach/mime-type というページで設定する。
if ($footer) // フッタ { $ret = <<<EOD <div class="navi_footer"><hr class="full_hr" /> <ul class="navi"> <li class="navi_left">{$navi[$home]['prev1']}<br />{$navi[$home]['prev']}</li> <li class="navi_right">{$navi[$home]['next1']}<br />{$navi[$home]['next']}</li> <li class="navi_none">{$navi[$home]['home1']}<br />{$navi[$home]['up']}</li> </ul></div> EOD; }
フッタを特定する div を設定しておくと、CSS でそこだけスパッと消すことができる。navi プラグインを利用した階層構造のページを記述しておき、これを印刷したくなった場合などに有用なテクニック。
通常の編集ページでは s の accesskey が設定されているのにここだけ設定されていないのはなんか気持ち悪いので。
class Tracker_field_submit extends Tracker_field { function get_tag() { $s_title = htmlspecialchars($this->title); $s_page = htmlspecialchars($this->page); $s_refer = htmlspecialchars($this->refer); $s_config = htmlspecialchars($this->config->config_name); return <<<EOD <input type="submit" value="$s_title" accesskey="s" />
$script を http から絶対 URI で指定していない場合、つまり 前述の $script の設定の場合は以下の設定が必要。
function replace_title($arr) { global $script; $self = 'self:';
return "[[$title$arrow>$self?plugin=tracker_list&refer=$r_page& config=$r_config&list=$r_list&order=$r_order]]"; }
return は実際には一行で。そして InterWikiName に
[./ self] raw
と書いておく。
var $class = ' class="small"';
という記述がそこかしこにあるのでこれを削る。か。CSS の側で .small を削る。気持ちは分かるんだけど、どっか設定を一箇所に固めて手軽に on/off できるようにしといてほしかった。
これはプラグインじゃないです。
if (edit_auth($page,$auth_flag,$exit_flag) and is_editable($page)) { return TRUE; }
ここの if に適当に条件を増やしてやると、例えば特定のサイトに設置している場合だけ編集可能とか、そういう設定が可能。まぁ pukiwiki.ini.php にユーザー追加して認証掛ける方がまっとうだとは思うけど、ローカルに持ってきたバックアップを見ていて思わずそのまま編集しそうになったとか、そういう事態を防げるかも。
開発日記/2003-02-21 - PukiWiki-dev より
要するに
もの。転送量の制限をこの ini ファイルの中で max_size として定義、利用可能。
必要なものは
これで現在(2003-04-11)本家では用意されていない EZweb 用の skin や w3m 用の skin を用意可能。
いじりすぎててよく分からないけど、方針としては