|
現: 2004-08-23 (月) 17:27:45 nao-pon |
| + | &font(16pt,b){&font(Red){※};この改造で得られる機能は、[[のぶのぶさん:http://www.kowa.org/]] にすべて取り込んで頂きました。};~ |
| + | (2004-08-23に[[CVS:http://www.kowa.org/modules/xfmod/forgecvs/cvsbrowse.php/modpukiwiki]]で確認。) |
| + | *modPukiWikiの改造メモ [#t52d615d] |
| + | #contents |
| + | **共通リンクディレクトリに対応してみた。 [#da420ccd] |
| + | ***PukiWikiConfig.php - class PukiWikiConfig [#pbb01dbf] |
| + | #code(){{{ |
| + | 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(); |
| + | } |
| + | } |
| + | } |
| + | }}} |
| + | ***PukiWikiLink.php - class PukiWikiLink_autolink [#e39558ff] |
| + | #code(){{{ |
| + | 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); |
| + | } |
| + | }}} |
| + | ***PukiWikiFunc.php [#r8845b5a] |
| + | #code(){{{ |
| + | // 共通リンクディレクトリの処理(該当フルネームを返す:ブラケットなし) 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]; |
| + | } |
| + | }}} |
| + | |
| + | |
| + | **レンダリングデータをキャッシュするようにしてみた。 [#v5f9bb25] |
| + | ***PukiWikiConfig.php - class PukiWikiConfig [#zcf10ea4] |
| + | #code(){{{ |
| + | 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(); |
| + | } |
| + | } |
| + | } |
| + | }}} |
| + | |
| + | ***PukiWikiRender.php [#e15c3480] |
| + | #code(){{{ |
| + | 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; |
| + | } |
| + | }}} |
| + | |
| + | ***PukiWikiLink.php - class PukiWikiLink_autolink [#j4babbbd] |
| + | #code(){{{ |
| + | 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)); |
| + | } |
| + | }}} |
| + | |
| + | **WikiNameの自動リンクが有効の時、ページがない場合のページ作成リンク有り無しのオプションを追加してみた。 [#dbcd986b] |
| + | ***PukiWikiLink.php [#g0230e22] |
| + | ※ 関数作成 |
| + | #code(){{{ |
| + | 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 == '') ? '' : '&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&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; |
| + | } |
| + | } |
| + | }}} |