ページへ戻る

− Links

 印刷 

modPukiWikiの改造メモ :: XOOPS マニア

UsersWiki:nao-pon/メモ/modPukiWiki

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

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

modPukiWikiの改造メモ anchor.png[3]

ページ内コンテンツ
  • modPukiWikiの改造メモ
    • 共通リンクディレクトリに対応してみた。
      • PukiWikiConfig.php - class PukiWikiConfig
      • PukiWikiLink.php - class PukiWikiLink_autolink
      • PukiWikiFunc.php
    • レンダリングデータをキャッシュするようにしてみた。
      • PukiWikiConfig.php - class PukiWikiConfig
      • PukiWikiRender.php
      • PukiWikiLink.php - class PukiWikiLink_autolink
    • WikiNameの自動リンクが有効の時、ページがない場合のページ作成リンク有り無しのオプションを追加してみた。
      • PukiWikiLink.php
Page Top

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

Page Top

PukiWikiConfig.php - class PukiWikiConfig anchor.png[5]

 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[6]
		$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[7]

 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[6]
		$alias = $name;
		
		// 無視リストに含まれている、あるいは存在しないページを捨てる
		// 共通リンクディレクトリ対応 by nao-pon[6]
		//if (in_array($name,$this->forceignorepages) or !PukiWikiFunc::is_page($name))
		if (in_array($name,$this->forceignorepages))
		{
			return FALSE;
		}
		
		// 共通リンクディレクトリを探す by nao-pon[6]
		if (!PukiWikiFunc::is_page($name))
		{
 
			if (!$name = PukiWikiFunc::get_real_pagename($name))
				return FALSE;
		}
		
		// 共通リンクディレクトリ対応 by nao-pon[6]
		//return parent::setParam($page,$name,'','pagename',$name);
		return parent::setParam($page,$name,'','pagename',$alias);
	}
Page Top

PukiWikiFunc.php anchor.png[8]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
	// 共通リンクディレクトリの処理(該当フルネームを返す:ブラケットなし) by nao-pon[6]
	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[9]

Page Top

PukiWikiConfig.php - class PukiWikiConfig anchor.png[10]

 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[6]
		$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[11]

 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[6]
			$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[6]
			$fp = fopen($cache_file, "wb");
			fwrite($fp, $retstr);
			fclose($fp);
		}
		
		return $retstr;
	}
Page Top

PukiWikiLink.php - class PukiWikiLink_autolink anchor.png[12]

 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[6]
		//if (!$autolink or !file_exists(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat'))
		if (!$autolink or !$autolink_data)
		{
			return;
		}
		// AutoLinkデータを予めチェックするようにした by nao-pon[6]
		//@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[13]

Page Top

PukiWikiLink.php anchor.png[14]

※ 関数作成

 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[6]
			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;
		}
	}

Last-modified: 2004-08-23 (月) 17:27:45 (JST) (7180d) by nao-pon