惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The GitHub Blog
The GitHub Blog
MyScale Blog
MyScale Blog
爱范儿
爱范儿
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队
Y
Y Combinator Blog
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
M
MIT News - Artificial intelligence
博客园 - Franky
V
Visual Studio Blog
I
InfoQ
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
博客园 - 司徒正美
L
LangChain Blog

博客园 - simonw

Lua5.1中可变参数...对性能的影响 - simonw - 博客园 IIS7权限简述 MoinMoin Wiki 1.7优化与维护经验 - simonw WoW安全模板技术文档翻译 - SecureStateHeader 雕虫小技之MoinMoin Wiki与Discuz论坛的单点登陆整合 MoinMoin Wiki 在Linux Apache下的安装 Wiki你长的为何与众不同--对Wiki独创写作语法原因的思考 MoinMoin Wiki 在IIS下的安装与升级 Metatable In Lua 浅尝辄止 Lua中实现类似C#的事件机制 MoinMoin Wiki 权限使用指南 MoinMoin Wiki 引擎概览 Wiki服务商简介 N-Layer, COP, SOA In WOW Addon Develop Ioc容器应用浅析 WOW插件:ShortStory 1.3 发布(2007.7.5) Castle ActiveRecord 泛型应用 WOW插件:ShortRobot 1.21 发布(2006.10.3) WOW插件:ShortUnitFrame 2.1 发布(2007.7.17)
雕虫小技之为Discuz论坛添加Wiki语法 - simonw - 博客园
simonw · 2007-03-19 · via 博客园 - simonw

目标是使在论坛中的特定语法能够被解析为Wiki实际的url, 如 http://wiki.cwowaddon.com/关键字

需要支持以下2种论坛语法:

  1. 使论坛支持 [wiki]关键字[/wiki] 这样的语法.
  2. 使论坛支持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的论坛中使用, 第一种则不限.

<?php function 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也能使用论坛这样的语法技术, 写作门槛将大大降低.