雕虫小技之为Discuz论坛添加Wiki语法

目标是使在论坛中的特定语法能够被解析为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也能使用论坛这样的语法技术, 写作门槛将大大降低.

孤独是为了孤独背后的解脱,孤独的过程,就是一个寻找真爱的过程。

雕虫小技之为Discuz论坛添加Wiki语法

相关文章:

你感兴趣的文章:

标签云: