PukiWiki改造 その1(基本)
概要: †
HPとして公開する場合デフォルトに対して表示、機能追加、運用上のため改造します。
1.認証によるページの閲覧制限 †
FAQ/41参照
方針:閲覧は誰でも自由に、編集だけ制限する。
設定するには、pukiwiki.ini.phpの中の以下の部分を書き換えます。
$edit_auth = 0;
↓
$edit_auth = 1;
2.一括凍結機能追加(freeze2) †
編集可能ページを編集できないように一括して凍結するためのプラグインfreeze2を導入し、凍結忘れをしないようにします。
「欲しいプラグイン/154複数ページ一括凍結」参照。
- ) 上記HPより最新のファイルをPC上にダウンロードします。
- ) 解凍するとfreeze2.inc.php、messages.txtができます。
注:凍結解除は個々に行うのでunfreeze2.inc.phpは対象としません。
- ) 上記HPでは、messages.txtを/var/www/pukiwiki/ja.lng.phpに追加するように記述されていますが、バージョンアップなどで、追加が外れる恐れがあるので、freeze2.inc.phpとmessages.txtを修正して対応します。
また、ページ一覧に凍結されているページが表示され、凍結されているページを凍結しようとするとエラーとなるので、ページ一覧には凍結されていないページのみを表示するようにします。
- freeze2.inc.phpの修正
:
:
function plugin_freeze2_action()
{
global $_attach_messages,$_freeze2_messages;
global $vars,$script;
require_once(PLUGIN_DIR.'freeze2.lng.php'); ← 追加する。
//ページとバックアップ用正規表現
$pattern = array('/^<ul>/m',
'/(<li>)(<a href=.*>)(.*)(<\/a>.*<\/li>$)/m',
'/^<\/ul>/m');
:
:
$body = preg_replace($pattern,$replace,
page_list(get_existpages(DATA_DIR)));
↓ exclude_freezed_pages関数を挿入する。
$body = preg_replace($pattern,$replace,
page_list(exclude_freezed_pages(get_existpages(DATA_DIR))));
:
:
------- exclude_freezed_pages関数を最後に追加する -------
function exclude_freezed_pages($pages )
{
$aryret = array();
foreach($pages as $page) {
if (!is_freeze($page)) {
$aryret[] = $page;
}
}
return $aryret;
}
?>
&ref(): File not found: "freeze2.inc.php" at page "CentOS5 サーバー構築/Wikiサイト構築/PukiWiki改造1";
- messages.txtの修正
ファイルのエンコードが変換できるエディターを使用し、ファイルの初めと終わりに以下のようなPHPタグを追加しメッセージを囲みます。
<?php
:
:
:
?>
エンコードをEUCからUTF-8に変換してファイル名freeze2.lng.phpとして保存します。
freeze2.lng.php
- ) /var/www/pukiwiki/plugin/にコピーする。
- ) 所有者と権限を変更する。
# cd /var/www/pukiwiki/plugin/
# chmod 644 freeze2.inc.php
# chmod 644 freeze2.lng.php
# chown apache. freeze2.inc.php
# chown apache. freeze2.lng.php
- ) 使用方法
- ブラウザーで次のURLにアクセスする。http://ホスト名/pukiwiki/?plugin=freeze2
- 「複数ページ一括凍結プラグイン」ページ
wikiを選択し、パスワードを入力し、「検索」を押下する。
- 「ページの一覧」ページ
凍結するページをチェックし「確認」を押下する。
- 「選択された一覧」ページ
「凍結」を押下する。
- 「ページを一括凍結しました」ページが表示される。
3. 複数行のプラグイン引数を可能 †
プラグインを使用するときに引数が複数行になっても処理を可能にする。特に複数行の文書に対する処理には必須です。
「複数行のプラグイン引数を可能に」参照。
/var/www/pukiwiki/pukiwiki.ini.phpの56行目を以下のように編集します。
define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 1); // 1 = Disabled
↓
define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 0); // 1 = Disabled
4. 文字背景色の指定(code) †
コンソール画面などで文字を白字、背景を黒で表示できるようにします。文書の一部の文字の色と背景色を指定して表示するのはcolorプラグインで可能ですが、複数行には対応していません。複数行に亘る文書を単純に文字色と背景色を指定して表示するプラグインとしてpreプラグインを導入します。preプラグインはcodeプラグインの付属プラグイン(同梱されている)なので、codeプラグインを導入します。
また、今回は使用しませんが、Codeプラグインも使用できるようになります。
Pukiwiki Plugin DevelopmentのHPを参照。
前提:
- ) 上記HPを辿って最新のソース(今回はcode_0_6_0_pr3i.tar.bz2.tgz)をダウンロードすます。ソースが正規の場所から無くなったようで、ソフト一覧にある場所から入手しました。
- ) ファイルを解凍します。
- ) ファイルをコピーします。
- ) /var/www/pukiwiki/skin/pukiwiki.css.phpの33行目に次の1行を追加します。
- ) @import "./code.css";
if ($media != 'print') $media = 'screen';
// Output CSS ----
?>
@charset "<?php echo $charset ?>";
@import "./code.css"; ← 追加する。
pre, dl, ol, p, blockquote { line-height:130%; }
blockquote { margin-left:32px; }
body,td {
- ) code.inc.phpを添付のcode.inc.phpと入れ替えます。
添付のcode.inc.phpを使用すると横幅を指定することができます。次の使用方法の中の赤字部分です。オリジナルのcode.inc.phpでは横幅が文章の最大長となり、プログラムのソースなど横に長くなってしまうとページ全体の横幅が長くなってしまい他の地の文章を読むときもスライドバーで横に移動させなければならなかったので、横幅を指定できるように改善しました。5. コメント入力後の「ページ名」の防止のようになります。但し、オプションのicon,begin-endと併用した場合は未テストなので正常に動かないかもしれません。
code.inc.php
- ) 使用方法
書式:
#pre[([color[, background-color]] [,number|,nonumber] [,soft|,hard] [,width:横幅]
[,icon|,noicon] [,begin-end|,begin...end] [,ファイル名])]{{
整形済文章
}}
color | 文字の色 |
background-color | 背景色 |
number | nonumber | 行番号の表示・非表示 |
soft | hard | インライン展開をするかそのまま表示するか |
width:横幅 | 横幅をpxの単位で指定します。例 width:400 |
icon | noicon | icon表示するかしないか |
begin-end | begin...end | 表示範囲の開始行と最終行。表示方法が2つある |
ファイル名 | 表示するファイル名 |
例:
#pre(white,black,nonumber,soft,icon,width:500){{
文章
文章
}}
注意:以下のように空のパラメータを指定すると背景のパラメータの値が空になるので、修正後のように空のパラメータを除きます。
#pre(white,black,,soft){{
#pre(white,black,nonumber,soft,){{
↓
修正後:
#pre(white,black,soft){{
#pre(white,black,nonumber,soft){{
5. コメント入力後の「ページ名」の防止 †
セキュリティーの観点からコメントへの投稿者に既存ページへのアクセスや新規ページ作成が出来ないようにします。
- ) コメント入力後に名前の後の「?」を付けないようにします。
comment.inc.phpの42行目をコメントアウトします。
// $_name = ($_name == ) ? : str_replace('$name', $_name, PLUGIN_COMMENT_FORMAT_NAME);
- ) コメント入力の"[["と"]]"(半角大括弧)を"[["と"]]"(全角大括弧)に変換するようにします。
コメント入力時に書き込まれた「名前」と「コメント」の中に含まれる"[["と"]]"(半角大括弧)を"[["と"]]"(全角大括弧)に変換し、ページ名になるのを防ぎます。
comment.inc.phpの47行目の後に以下を追加します。
$_name = ($_name == ) ? : str_replace('[[', '[[', $_name);
$_name = ($_name == ) ? : str_replace(']]', ']]', $_name);
$comment = str_replace('[[', '[[', $comment);
$comment = str_replace(']]', ']]', $comment);
6. YouTubeなどの動画を表示させる(netvideos) †
自作プラグイン/netvideos.inc.phpより"netvideos.inc.php"をダウンロードし、ファイルのエンコードをエディターなどでEUCからUTF-8に変換し、/var/www/pukiwiki/plugin/に保存します。
ファイルの権限・所有者を変更します。
# cd /var/www/pukiwiki/plugin
# chmod 644 netvideos.inc.php
# chown apache. netvideos.inc.php
表示したいところに以下のように#netvideosを記述します。
#netvideos("ID",WIDTH,HEIGHT,align,サービス名);
- 説明:
ID : 動画のID
WIDTH : 動画表示の幅
HEIGHT : 動画表示の高さ
align : center | left | right
サービス名 : youtube | googlevideo
- 例
#netvideos("3rn3E0T20Ro",600,500,center,youtube);
7. ディレクトリー内画像ファイル表示(imgfolder) †
- ) 概要
画像を表示する場合、ページに添付を行わずに、サーバーのディレクトリーに保存した画像ファイルを表示します。サーバー側での画像ファイルの管理が容易になります。
- ) インストール
吉野情報技研/imgfolder.inc.php (Pukiwikiプラグイン)より"imgfolder.inc.zip"をダウンロードし解凍し、ファイルのエンコードをエディターなどでEUCからUTF-8に変換し、/var/www/pukiwiki/plugin/に保存します。
ファイルの権限・所有者を変更します。
# cd /var/www/pukiwiki/plugin
# chmod 644 imgfolder.inc.php
# chown apache. imgfolder.inc.php
- ) 設定
基準となるフォルダを指定します。(デフォルトで、Pukiwikiのimage/フォルダになっている。)
define("DEF_IMG_FOLDER" , IMAGE_DIR );
- ) 書式:
- 原寸表示
&imgfolder(画像ファイル名, [タイトル(alt属性)]){};
- パーセント指定表示、(クリックすると原寸表示するリンク付き)
&imgfolder(画像ファイル名, 80%, [タイトル(alt属性)] ){};
- 幅と高さを指定して表示
&imgfolder(画像ファイル名, 幅, 高さ, [タイトル(alt属性)] ){};
- タイトル(alt属性)は必須ではなく、省略した場合、ファイル名がalt属性に付きます。
8. HTML文直取り込み(htmlinsert) †
- ) 概要
Wikiの機能だけではどうしても表現が制限されます。そこで直接HTML文をWiki文内に取り込んで表示させ表現内容を豊富にします。
- ) インストール
Sonots' PukiWiki プラグインより"htmlinsert.inc.php"をダウンロードし、/var/www/pukiwiki/plugin/に保存します。
ファイルの権限・所有者を変更します。
# cd /var/www/pukiwiki/plugin
# chmod 644 htmlinsert.inc.php
# chown apache. htmlinsert.inc.php
html文のファイルを保存するDirectoryを作成します。
# cd /var/www/pukiwiki/plugin
# mkdir htmlinsert
# chown apache. htmlinsert
- ) 設定
特になし。
- ) 書式:
#htmlinsert(ファイル名);
- ) 使用方法
使用方法の詳細はダウンロードページを参照下さい。
テーブルをInsertする場合は、以下のようdivタグでtableタグを囲みます。
<div class="ie5">
<table class="xxx" style="font-size: 1.5em;" cellspacing="0" border="0"><tbody><tr>
<td >列1</td>
<td ><img width="100" height="100" alt="" src="img/img.jpg"></td>
<td >列3</td>
</tr></tbody></table></div>
9. アイコンの追加(default.ini.php) †
⌣ → などフェースマークのようにインラインで使用できるアイコンを追加します。
- ) アイコンファイルの配置
ここではimage/customというディレクトリーを作成してそのディレクトリー下にアイコンファイルを配置した例とし、ここに配置します。
- ) default.ini.phpの修正
default.ini.phpの中に以下のように、追加するアイコンの名前とファイル名と追加します。
$facemark_rules = array(
// Face marks
:
'&(worried);'=>' <img alt="[$1]" src="' . IMAGE_DIR . 'face/worried.png" />',
'&(anchor);'=>' <img alt="[$1]" src="' . IMAGE_DIR . 'custom/anchor.gif" />',
:
これで以下のようにアイコンが使用できます。
&anchor; →