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

推荐订阅源

D
DataBreaches.Net
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
IT之家
IT之家
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Help Net Security
J
Java Code Geeks
aimingoo的专栏
aimingoo的专栏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research

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