目标是使在论坛中的特定语法能够被解析为Wiki实际的url, 如 http://wiki.cwowaddon.com/关键字
需要支持以下2种论坛语法:
- 使论坛支持 [wiki]关键字[/wiki] 这样的语法. 使论坛支持wiki特定的引用语法, 如在MoinMoin wiki下是 [“关键字”], 在MediaWiki下是 [[关键字]].
原理是使用语法扫描器在页面解析的时候扫描帖子内容, 对专门的语法实施特定文本替换.
实施:
viewthread.php文件
负责展现帖子的程序是viewthread.php这个文件, 打开并定位到大约330多行左右, 可以看到下面的代码, 这里正是对帖子内容进行语法替换的地方, 我们在这下面继续加入我们自己的语法解析器即可.
$post['message'] = discuzcode($post['message'],$post['smileyoff'],$post['bbcodeoff'],$post['htmlon'],$forum['allowsmilies'],$forum['allowbbcode'], ($forum['allowimgcode'] &&$showimages?1:0),$forum['allowhtml'], ($forum['jammer'] &&$post['authorid'] !=$discuz_uid?1:0),0,$post['authorid']);
这是我加入的自定义新增wiki语法解析函数, 为了管理方便将其独立置于addons/dz_moinwiki.php文件中, 当然名字任由您定.
$post['message'] = moinwiki_parse($post['message']);
别忘了在文件起始部分加入文件引用:
include_once(DISCUZ_ROOT.'./addons/dz_moinwiki.php');
dz_moinwiki.php文件
解析代码会循环匹配正则表达式所限定的格式然后将其替换为html, 如果需要mediawiki的语法可以将第二个正则表达式替换为 ‘#\[\[(.+?)\]\]#s’ 需要注意的是第二种语法只能在支持html的论坛中使用, 第一种则不限.
<?phpfunction moinwiki_parse($message){ while (preg_match('#\[wiki\](.+?)\[/wiki\]#s',$message,$match)) { $wiki_name=$match[1]; $wiki_html='<b><a href="http://wiki.cwowaddon.com/'.$wiki_name.'" target="_blank">'.$wiki_name.'</a></b>'; $message=str_replace($match[0],$wiki_html,$message); } while (preg_match('#\[\&;(.+?)\&;\]#s',$message,$match)) { $wiki_name=$match[1]; $wiki_html='<b><a href="http://wiki.cwowaddon.com/'.$wiki_name.'" target="_blank">'.$wiki_name.'</a></b>'; $message=str_replace($match[0],$wiki_html,$message); } return$message;}?>
通过这个简单的例子我们也可以看到, 只需对现有html所见即所得技术加以小扩展即可支持核心的wiki语法, 而又能享受到排版的便利, 如果wiki也能使用论坛这样的语法技术, 写作门槛将大大降低.
孤独是为了孤独背后的解脱,孤独的过程,就是一个寻找真爱的过程。