追加機能

pukiwikiデフォルトの設定からの変更点を記述していきます
下にいくほど新しく追加した機能です

DSBLブラックリスト導入による公開プロキシの規制

詳細ページ[外部リンク]
プロクシじゃないのにPROXY規制に引っかかった場合の対処法[外部リンク]
現在規制解除中

style.inc.phpの追加

公式ページ[外部リンク]
参考ページ[外部リンク]
自由に CSS スタイルを指定できるようになるプラグイン
これにより表組の左/中央/右寄せが可能に。
(使用例:左寄せ)

#style(class=table_left)
|ここに表を入れてやると、左寄せになる|
#style(end)

(使用例:右寄せ)

#style(class=table_right)
|ここに表を入れてやると、右寄せになる|
#style(end)

センタリングは標準スタイルです。

nicovideo.inc.phpの追加

ニコニコ動画のサムネイル表示プラグインの追加。

#nicovideo(sm*****)で表示可能

(使用例)

youtube.inc.phpの追加

youtubeの動画のリンクを貼るプラグインを追加

#youtube(アドレスにあるv=以降の文字列を入力)

で表示可能に。 (使用例)

RecentChangesの取得件数を70から130に変更

pukiwiki.ini.phpの$maxshowを大きくしてRecentChangesの表示件数を130に。
一時期300にしてたがかなり重いみたいなので減らした。

2ch風掲示板bbs.inc.phpプラグインの設置

2ch型掲示板プラグイン[外部リンク] UTF-8にしてるんで2ch専用ブラウザとかならバグるかも。
テスト段階。

belong.inc.phpプラグイン追加

公開ページ[外部リンク]
そのページに対してリンクしているページをリスト表示するプラグイン。
このページはこのプラグインがなければ成り立たないくらい重要なプラグインです。

#belong

のみにするとそのページにリンクしている全ページを一覧にする。

(例)任意のページを除きたい場合

#belong("トナカイの乳"&~[HP回復])

トナカイの乳 へリンクしているページを表示するが HP回復 は表示しない。
応用でこんなこともできます (例)任意のページを除きたい場合2

#belong("トナカイの乳"&~[HP回復<])

トナカイの乳 へリンクしているページを表示するが HP回復から始まるページ は表示しない。
(例)任意のページを除きたい場合3

#belong("トナカイの乳"&~[HP回復<]&~[クエスト<])

トナカイの乳 へリンクしているページを表示するが HP回復から始まるとクエストから始まるページ は表示しない。
っといった感じである程度を操作できます。

うちのサイトではモンスターページとアイテムページが「一定の規則がないページ」となってます(これは初期段階でよく構想を練らなかったミス)
しかし、アイテムページとモンスターページが同時に同じページをリンクする事はほとんどない為、
アイテム、もしくはモンスターをbelongによって一覧したい場合は

#belong("ページ名"&~[Ver<]&~[クエスト<]&~[NPC/<]&~[MAP/<]&~[HP回復<])

これを入れるとほぼ間違いなく思いどーりになるでしょう。
:ページ名はbelongを入れるページ名。&~[Ver<]はパッチ情報からのリンク、&~[HP回復<]はそのページを取り扱ってる一覧ページ。

ちなみにデフォルトで「コメントページ」からのリンクはbelongで弾く設定をしてあります。 リンクされているのに正常に#belongで表示できない場合は?plugin=linksコマンドを実行すると治るかも。

region.inc.phpプラグイン追加

長ったらしい文章を、邪魔だと思うときは縮小表示しておき、
見たいときにだけ展開できるようにする機能。

#region(さんぷる)
この部分は表示したり隠したりできる。~
インラインタグ仕様可能。
#endregion

(例)

+  戦士装備

GSskinに変更

GSskinを適用してみました。
公開ページ[外部リンク]

別ホストを外部リンクとして扱い、クッションページも設けるjumpto.inc.php

公開ページ[外部リンク]
以上で外部リンクに矢印のようなマークが付き、外部へのリンクへは「target="_blank"」と同じ動作をするような設定も可能

Flash.inc.php

公開ページ[外部リンク] フラッシュを表示できるプラグイン。

#flash(flashムービーファイル,幅x高さ,...)
&flash(flashムービーファイル,幅x高さ,...)

(使用例)

&flash(robo.swf,300x200,bgcolor=#000000);

linklist.inc.php追加

自動相互リンク作成・プラグイン
linklist.inc.php[外部リンク]

サーバー移行によるPHP5.2.5へのプラグインの対応

新サーバーはPHP5.2.5。
①昨日のカウンターが「0」になる
②コメントに「new!」がつかない、の二つの問題が出てきた。
解決策
http://pukiwiki.sourceforge.jp/dev/?BugTrack2%2F141[外部リンク]
counter.inc.php 111行目あたり

- $is_yesterday = ($counters[$page]['date'] == get_date('Y/m/d', strtotime('yesterday', UTIME)));
+ $is_yesterday = ($counters[$page]['date'] == get_date('Y/m/d', strtotime('yesterday')));

修正後解決

http://pukiwiki.sourceforge.jp/dev/?BugTrack2%2F120[外部リンク]
new.inc.php 38行目あたり

-		$timestamp = strtotime($date);
-		if ($timestamp === -1) return '&new([nodate]){date}: Invalid date string;';
+		$timestamp = strtotime(preg_replace('/\([^\x00-\x7F]+\)/','',$date));
+		if(version_compare(phpversion(),'5.1')<0){
+			if ($timestamp === -1) return '&new([nodate]){date}: Invalid date string;';
+		}else{
+			if ($timestamp === FALSE) return '&new([nodate]){date}: Invalid date string;';
+		}

修正後解決

replace.inc.php

一括置換プラグイン。
コメント欄の書込みも置換されちゃうのが難点かな・・・
公式ページ[外部リンク]

regexp.inc.php

一括置換プラグイン。
複数行,正規表現に対応
公式ページ[外部リンク]
cmd:regexp

Javascriptで入力支援

Javascriptで入力支援プラグイン。
inputtoolbar.inc.php[外部リンク]

導入は↑のページを読み、進めればいいが、結構古い記事の為、Pukiwiki1.4.5_1用になっている。
Pukiwiki1.4.7でも使えたけど、Pukiwiki Plus!のファイルを持ってくる際は
コメントにあるようにpukiwiki-1.4.5plus-i18n-u2.tar.gz のものをDLしないと無理。

導入が出来たかどうかを#inputtoolbarで読み出して、無事表示が確認できれば、
プラグインを読み出さなくても表示されるように改造する

コメントに特に入力支援は現在のところ必要ないと思ったので、
編集画面にのみ入力支援を表示するようにした。

上の方の<head>の下あたりに

<script type="text/javascript" src="skin/inputhelper.js"></script>

を追加。

下の方の</body>の上あたりにv

<script type="text/javascript" src="skin/assistloaded.js" ></script>

を追加

<div class="edit_form">
<form action="$script" method="post" style="margin-bottom:0px;">
$template
$addtag

こんな感じの記述を探す。
うちの場合はテキストエリアとページの更新の間に表示させたかった為だいたいその辺りにある

<textarea name="msg" rows="$rows" cols="$cols">$s_postdata</textarea>

という記述に続いて、

<map id="map_button" name="map_button">
<area shape="rect" coords="0,0,22,16" title="URL" alt="URL" href="#" onclick="javascript:pukiwiki_linkPrompt('url'); return false;" />
<area shape="rect" coords="24,0,40,16" title="B" alt="B" href="#" onclick="javascript:pukiwiki_tag('b'); return false;" />
<area shape="rect" coords="43,0,59,16" title="I" alt="I" href="#" onclick="javascript:pukiwiki_tag('i'); return false;" />
<area shape="rect" coords="62,0,79,16" title="U" alt="U" href="#" onclick="javascript:pukiwiki_tag('u'); return false;" />
<area shape="rect" coords="81,0,103,16" title="SIZE" alt="SIZE" href="#" onclick="javascript:pukiwiki_tag('size'); return false;" />
</map>
<map id="map_color" name="map_color">
<area shape="rect" coords="0,0,8,8" title="Black" alt="Black" href="#" onclick="javascript:pukiwiki_tag('Black'); return false;" />
<area shape="rect" coords="8,0,16,8" title="Maroon" alt="Maroon" href="#" onclick="javascript:pukiwiki_tag('Maroon'); return false;" />
<area shape="rect" coords="16,0,24,8" title="Green" alt="Green" href="#" onclick="javascript:pukiwiki_tag('Green'); return false;" />
<area shape="rect" coords="24,0,32,8" title="Olive" alt="Olive" href="#" onclick="javascript:pukiwiki_tag('Olive'); return false;" />
<area shape="rect" coords="32,0,40,8" title="Navy" alt="Navy" href="#" onclick="javascript:pukiwiki_tag('Navy'); return false;" />
<area shape="rect" coords="40,0,48,8" title="Purple" alt="Purple" href="#" onclick="javascript:pukiwiki_tag('Purple'); return false;" />
<area shape="rect" coords="48,0,55,8" title="Teal" alt="Teal" href="#" onclick="javascript:pukiwiki_tag('Teal'); return false;" />
<area shape="rect" coords="56,0,64,8" title="Gray" alt="Gray" href="#" onclick="javascript:pukiwiki_tag('Gray'); return false;" />
<area shape="rect" coords="0,8,8,16" title="Silver" alt="Silver" href="#" onclick="javascript:pukiwiki_tag('Silver'); return false;" />
<area shape="rect" coords="8,8,16,16" title="Red" alt="Red" href="#" onclick="javascript:pukiwiki_tag('Red'); return false;" />
<area shape="rect" coords="16,8,24,16" title="Lime" alt="Lime" href="#" onclick="javascript:pukiwiki_tag('Lime'); return false;" />
<area shape="rect" coords="24,8,32,16" title="Yellow" alt="Yellow" href="#" onclick="javascript:pukiwiki_tag('Yellow'); return false;" />
<area shape="rect" coords="32,8,40,16" title="Blue" alt="Blue" href="#" onclick="javascript:pukiwiki_tag('Blue'); return false;" />
<area shape="rect" coords="40,8,48,16" title="Fuchsia" alt="Fuchsia" href="#" onclick="javascript:pukiwiki_tag('Fuchsia'); return false;" />
<area shape="rect" coords="48,8,56,16" title="Aqua" alt="Aqua" href="#" onclick="javascript:pukiwiki_tag('Aqua'); return false;" />
<area shape="rect" coords="56,8,64,16" title="White" alt="White" href="#" onclick="javascript:pukiwiki_tag('White'); return false;" />
</map>
<script type="text/javascript" src="skin/assistant.js" ></script>

と記述。
これはinputtoolbar.inc.php内の必要部分に

<script type="text/javascript" src="skin/assistant.js" ></script>

を追加したもの。
やってないけどたぶんコメントも pcomment.inc.phpとか同じ要領でいじればできると思う
成功したら編集画面のテキストエリアの下に入力支援が表示される

javasien.png

ちょっとは楽になるかな?
ちなみにinputtoolbar.inc.phpは削除しても動く

get_existpages() の高速化

pagename_cache.php[外部リンク]
全ページ名のリストを得る get_existpages() という関数をキャッシュ利用し、wiki高速化
うちの核ともいれるbelong.inc.phpプラグインはもろこの関数を使用しているため、高速化が期待できる・・・!
と思って入れてみると、かなり早くなった!!!かも!


導入・・・サイトのdiffを使用すればいいんだけど使うのdiffうまく使えない・・・てわけで手動

 	// Optional actions
 	if ($dir == DATA_DIR) {
+		// Update pagename cache
+		if (! $file_exists) pagename_cache_update();
+
 		// Update RecentChanges (Add or renew the $page)
 		if ($timestamp === FALSE) lastmodified_add($page);
 }
 
 // Get a page list of this wiki
-function get_existpages($dir = DATA_DIR, $ext = '.txt')
+function get_existpages($dir = DATA_DIR, $ext = '.txt', $cache = true)
 {
+	if ($dir == DATA_DIR && $ext == '.txt' && $cache == true) {
+		return pagename_cache_get_existpages();
+	}
+
 	$aryret = array();
 
 	$pattern = '((?:[0-9A-F]{2})+)';

スタイルシートの非 PHP 化による負荷軽減

参考[外部リンク]
ページの説明では、PHPをいじってCSSを作る方法がとられてたけど、
実際、自分のページに読まれてるCSSをコピペで作ると楽。

<?php
	$gs2color = "";
	if (defined('PKWK_SKIN_GS2_INDEX_COLOR'))
		$gs2color = PKWK_SKIN_GS2_INDEX_COLOR;
	echo <<<EOD
<link rel="stylesheet" type="text/css" media="screen" href="skin/pukiwiki.css" />
EOD;
?>

pukiwiki.skin.phpのヘッダーらへんに追加。
print用は多分いらないと思うので削除。
だいぶ早くなったと思うような思わないような・・・。
GS2スキンの為ちょっと手間取ったけど、実際のCSSはこちら[外部リンク]

ref.inc.phpの改造

画像を表示させるプラグインのHTTPヘッダのOUTPUT部分をちょっと改造。
うちのwikiでは追加された画像が変更になる事はほとんどない為
「画像のみ」キャッシュを3ヶ月近く使用する事にする。
最後の方の行に

header('Cache-control: private, max-age=720000');

を追加。これで転送量が少しでも減るといいという目論見。
キャッシュフォルダを確認してみるとファイル有効期限が指定した時間になっているため
多分成功しているが、1週間くらいは様子見をしたい。

tag.inc.phpの導入

ページをタグ付けするプラグイン。地域別モンスター検索のソートに使えそう。
ページ[外部リンク]
index.php?cmd=tag のようにアクセスするとキャッシュをクリーンアップできます。

新鯖になった為、サーバーによる負荷対策&高速化も可能に

Apache mod_deflateの導入

httpd.confに以下を追加

<Location />
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI\.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary

AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rdf+xml
</Location>

画像はすでに圧縮されてるから拒否設定に。 しかしpukiwikiではAttachやrefで添付された画像は MIME/Typeによらず強制的に圧縮されてしまう ので 「ref.inc.phpの改造」にあった部分に

header('Content-Encoding: none');

を追加してあげる。

Apache mod_expiresの導入

.htaccess

ExpiresActive On
ExpiresByType image/gif “access plus 1 days”
ExpiresByType image/jpeg “access plus 1 days”
ExpiresByType image/png “access plus 30 days”
ExpiresByType application/x-shockwave-flash “access plus 1 years”
ExpiresByType application/rss+xml “access plus 30 minutes”
ExpiresByType application/x-javascript “access plus 20 days”
#ExpiresByType text/html “modification plus 15 minutes”
ExpiresByType text/css “access plus 20 days”

みたく設定した。 htmlをキャッシュするとコメントや更新の時もキャッシュを表示しちゃう かといって更新日時であるmodificationを指定したら今度は完全無視される。 のでコメントアウトしてあきらめた。

こちらで設定をしてしまったら 「ref.inc.phpの改造」にあった

header('Cache-control: private, max-age=720000');

の部分は削除

PHPアクセレーターのeAcceleratorを導入

インストール方法などは割愛