hypweb.net
XOOPSマニア  最新情報のRSS(サイト全体)
[ 自宅サーバーWebRing |ID=54 前後5表示乱移動サイト一覧 ]

TOP » UsersWiki » nao-pon » メモ » modPukiWiki

この改造で得られる機能は、のぶのぶさん にすべて取り込んで頂きました。

(2004-08-23にCVSで確認。)

modPukiWikiの改造メモ anchor.png

Page Top

共通リンクディレクトリに対応してみた。 anchor.png

Page Top

PukiWikiConfig.php - class PukiWikiConfig anchor.png

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
	function initParams() {
		global $_PukiWikiParam;
		$_PukiWikiParam = array();
		
		//PukiWikiMod 共通リンクディレクトリ読み込み by nao-pon
		$wiki_common_dirs = "";
		if (MOD_PUKI_WIKI_VER == "1.3" && file_exists(MOD_PUKI_WIKI_CACHE_DIR."config.php"))
		{
			include(MOD_PUKI_WIKI_CACHE_DIR."config.php");
		}
		// 共通リンクディレクトリ展開
		$wiki_common_dirs = preg_split("/\s+/",trim($wiki_common_dirs));
		sort($wiki_common_dirs,SORT_STRING);
		$_PukiWikiParam['wiki_common_dirs'] = $wiki_common_dirs;
		
		// オートリンクデータ読み込みとチェック
		$need_cache_clear = 0;
		$_PukiWikiParam['autolink_dat'] = array();
		if (file_exists(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat'))
		{
			$_PukiWikiParam['autolink_dat'] = file(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat');
			if (!file_exists(MOD_PUKI_CACHE_DIR .'autolink.dat') || ($_PukiWikiParam['autolink_dat'] != file(MOD_PUKI_CACHE_DIR .'autolink.dat')))
			{
				// 比較用オートリンクデータを保存
				list($pattern, $pattern_a, $forceignorelist) = $_PukiWikiParam['autolink_dat'];
				$fp = fopen(MOD_PUKI_CACHE_DIR . 'autolink.dat', 'wb') or
					die_message('Cannot write autolink file ' .
					MOD_PUKI_CACHE_DIR . '/autolink.dat' .
					'<br />Maybe permission is not writable');
				set_file_buffer($fp, 0);
				flock($fp, LOCK_EX);
				rewind($fp);
				fputs($fp, trim($pattern)   . "\n");
				fputs($fp, trim($pattern_a) . "\n");
				fputs($fp, trim($forceignorelist) . "\n");
				flock($fp, LOCK_UN);
				fclose($fp);
				
				// オートリンクデータが更新されているのでキャッシュをクリア
				$dh = dir(MOD_PUKI_CACHE_DIR);
				while (($file = $dh->read()) !== FALSE)
				{
					if (substr($file,-6) != '.cache')
					{
						continue;
					}
					$file = MOD_PUKI_CACHE_DIR.$file;
					unlink($file);
				}
				$dh->close();
			}
		}
	}
Page Top

PukiWikiLink.php - class PukiWikiLink_autolink anchor.png

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
	function set($arr,$page)
	{
		$WikiName = PukiWikiConfig::getParam('WikiName');
		
		list($name) = $this->splice($arr);
		
		// 共通リンクディレクトリ対応 by nao-pon
		$alias = $name;
		
		// 無視リストに含まれている、あるいは存在しないページを捨てる
		// 共通リンクディレクトリ対応 by nao-pon
		//if (in_array($name,$this->forceignorepages) or !PukiWikiFunc::is_page($name))
		if (in_array($name,$this->forceignorepages))
		{
			return FALSE;
		}
		
		// 共通リンクディレクトリを探す by nao-pon
		if (!PukiWikiFunc::is_page($name))
		{
 
			if (!$name = PukiWikiFunc::get_real_pagename($name))
				return FALSE;
		}
		
		// 共通リンクディレクトリ対応 by nao-pon
		//return parent::setParam($page,$name,'','pagename',$name);
		return parent::setParam($page,$name,'','pagename',$alias);
	}
Page Top

PukiWikiFunc.php anchor.png

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
	// 共通リンクディレクトリの処理(該当フルネームを返す:ブラケットなし) by nao-pon
	function get_real_pagename($page)
	{
		static $real_pages = array();
		
		$page = PukiWikiFunc::strip_bracket($page);
		
		if (isset($real_pages[$page])) return $real_pages[$page];
		
		$real_pages[$page] = false;
		foreach(PukiWikiConfig::getParam('wiki_common_dirs') as $dir)
		{
			$check = $dir.$page;
			if (PukiWikiFunc::is_page($check))
			{
				$real_pages[$page] = $check;
				break;
			}
		}
		return $real_pages[$page];
	}
Page Top

レンダリングデータをキャッシュするようにしてみた。 anchor.png

Page Top

PukiWikiConfig.php - class PukiWikiConfig anchor.png

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
	function initParams() {
		global $_PukiWikiParam;
		$_PukiWikiParam = array();
		
		//PukiWikiMod 共通リンクディレクトリ読み込み by nao-pon
		$wiki_common_dirs = "";
		if (MOD_PUKI_WIKI_VER == "1.3" && file_exists(MOD_PUKI_WIKI_CACHE_DIR."config.php"))
		{
			include(MOD_PUKI_WIKI_CACHE_DIR."config.php");
		}
		// 共通リンクディレクトリ展開
		$wiki_common_dirs = preg_split("/\s+/",trim($wiki_common_dirs));
		sort($wiki_common_dirs,SORT_STRING);
		$_PukiWikiParam['wiki_common_dirs'] = $wiki_common_dirs;
		
		// オートリンクデータ読み込みとチェック
		$need_cache_clear = 0;
		$_PukiWikiParam['autolink_dat'] = array();
		if (file_exists(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat'))
		{
			$_PukiWikiParam['autolink_dat'] = file(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat');
			if (!file_exists(MOD_PUKI_CACHE_DIR .'autolink.dat') &#x7c;&#x7c; ($_PukiWikiParam['autolink_dat'] != file(MOD_PUKI_CACHE_DIR .'autolink.dat')))
			{
				// 比較用オートリンクデータを保存
				list($pattern, $pattern_a, $forceignorelist) = $_PukiWikiParam['autolink_dat'];
				$fp = fopen(MOD_PUKI_CACHE_DIR . 'autolink.dat', 'wb') or
					die_message('Cannot write autolink file ' .
					MOD_PUKI_CACHE_DIR . '/autolink.dat' .
					'<br />Maybe permission is not writable');
				set_file_buffer($fp, 0);
				flock($fp, LOCK_EX);
				rewind($fp);
				fputs($fp, trim($pattern)   . "\n");
				fputs($fp, trim($pattern_a) . "\n");
				fputs($fp, trim($forceignorelist) . "\n");
				flock($fp, LOCK_UN);
				fclose($fp);
				
				// オートリンクデータが更新されているのでキャッシュをクリア
				$dh = dir(MOD_PUKI_CACHE_DIR);
				while (($file = $dh->read()) !== FALSE)
				{
					if (substr($file,-6) != '.cache')
					{
						continue;
					}
					$file = MOD_PUKI_CACHE_DIR.$file;
					unlink($file);
				}
				$dh->close();
			}
		}
	}
Page Top

PukiWikiRender.php anchor.png

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
	function transform($wikistr) {
		global $_PukiWikiFootExplain;
		
		if (PukiWikiConfig::getParam('use_cache'))
		{
			// キャッシュ確認 by nao-pon
			$cache_file = MOD_PUKI_CACHE_DIR.md5($wikistr).".cache";
			if (file_exists($cache_file)) return join('',file($cache_file));
		}
		
		if (!is_array($wikistr)) {
			$wikistr = explode("\n", $wikistr);
		}
		
		$this->_body->parse($wikistr);
		$retstr = $this->_body->toString();
		if (count($_PukiWikiFootExplain)) {
			ksort($_PukiWikiFootExplain,SORT_NUMERIC);
			$retstr .= count($_PukiWikiFootExplain) ? PukiWikiConfig::getParam('note_hr').join("\n",$_PukiWikiFootExplain) : '';
		}
		$_PukiWikiFootExplain=array();
		
		if (PukiWikiConfig::getParam('use_cache'))
		{
			//キャッシュ保存 by nao-pon
			$fp = fopen($cache_file, "wb");
			fwrite($fp, $retstr);
			fclose($fp);
		}
		
		return $retstr;
	}
Page Top

PukiWikiLink.php - class PukiWikiLink_autolink anchor.png

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
	function PukiWikiLink_autolink($start)
	{
		parent::PukiWikiLink($start);
		$autolink = PukiWikiConfig::getParam('autolink');
		$autolink_data = PukiWikiConfig::getParam('autolink_dat');
		// AutoLinkデータを予めチェックするようにした by nao-pon
		//if (!$autolink or !file_exists(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat'))
		if (!$autolink or !$autolink_data)
		{
			return;
		}
		// AutoLinkデータを予めチェックするようにした by nao-pon
		//@list($auto,$auto_a,$forceignorepages) = file(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat');
		@list($auto,$auto_a,$forceignorepages) = $autolink_data;
		$this->auto = $auto;
		$this->auto_a = $auto_a; 
		$this->forceignorepages = explode("\t",trim($forceignorepages));
	}
Page Top

WikiNameの自動リンクが有効の時、ページがない場合のページ作成リンク有り無しのオプションを追加してみた。 anchor.png

Page Top

PukiWikiLink.php anchor.png

※ 関数作成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
	function make_pagelink($page, $alias='',$anchor='',$refer='')
	{
		$s_page = htmlspecialchars(PukiWikiFunc::strip_bracket($page));
		$s_alias = ($alias == '') ? $s_page : $alias;
		
		if ($page == '') {
			return "<a href=\"$anchor\">$s_alias</a>";
		}
		
		$r_page = rawurlencode($page);
		$r_refer = ($refer == '') ? '' : '&amp;refer='.rawurlencode($refer);
		
 
		if (PukiWikiFunc::is_page($page)) {
			$passage = "";
			$title = PukiWikiConfig::getParam('link_compact') ? '' : " title=\"$s_page$passage\"";
			return "<a href=\"".MOD_PUKI_WIKI_URL."?$r_page$anchor\"$title>$s_alias</a>";
		} else {
			// ページ作成リンクをつけないオプション追加 by nao-pon
			if (!PukiWikiConfig::getParam('makepage_link')) return $s_alias;
			$retval = "$s_alias<a href=\"".MOD_PUKI_WIKI_URL."?cmd=edit&amp;page=$r_page$r_refer\">".PukiWikiConfig::getParam('_symbol_noexists')."</a>";
			if (!PukiWikiConfig::getParam('link_compact')) {
				$retval = "<span class=\"".PukiWikiConfig::getParam('style_prefix')."noexists\">$retval</span>";
			}
			return $retval;
		}
	}

トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 347, today: 1, yesterday: 0
初版日時: 2004-08-23 (月) 17:27:45
最終更新: 2004-08-23 (月) 17:27:45 (JST) (7974d) by nao-pon
このページのTopへ
メインメニュー
ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録
オンライン状況
115 人のユーザが現在オンラインです。

登録ユーザ: 0
ゲスト: 115

もっと...
サイト情報