Discuz 论坛源代码Z-turn实录

预先说明:本人是非程序员。本文依据自己的摸索,都是些Dirty的做法,与Discuz标准的开发方式不一致(因为我也不知道标准做法是什么)。请不要被我误导。

最近要给公司一个小论坛进行改版,论坛之前是我用Discuz搭的,很简单,只有一个版块。这次改版,主要目的是增加几个版块,同时在帖子列表页,要能显示每个帖子的摘要内容。需求看上去很简单,但当我开始操刀折腾Discuz的代码时,顿时让我这个PHP菜鸟有如坠入蜘蛛网的感觉。

虽然Discuz有模板与控制器的划分,但我不得不说,它的代码中积累的太多太多细碎的功能揉杂在一起,结构化做的实在不敢恭维。不过,想想如果自己作一个像Discuz一样功能复杂完整的论坛,工作量大的令自己知难而退了。毕竟,论坛应用有其本质复杂性。所以只有好硬着头皮上了。

说实话,以前自己是专职程序员时,一直尽力避免接触PHP代码,原因就是不希望编写或者维护这类代码。奈何造化弄人。

把论坛改成一个版块列表

======

我们的小论坛之前只有一个版块,没有版块列表,打开首页就能看到这个版块的帖子列表。这种形式对于一个刚刚起步的小网站来说,很合适。内容少,用户少,全都放在一页,一目了然,感觉一点不冷清。要达到这个效果,很简单: 将 forumdisplay.php 文件复制到 index.php ,同时在 index.php 的文件开头,将 fid (版块id) 硬写进去: $_GET['fid'] = 2; ok了。Dirty but works.

修改论坛页面表现

======

正规的做法是自己写一套模板,放到 ./templates 目录下。然后在系统管理界面安装它。做法是:将 ./templates/default 目录复制一份到自己的模板目录里,以后就在这个目录中修改。

帖子列表页增加每个帖子的内容预览

======

比较麻烦,本来我打算在 forumdisplay.php 中查询每个帖子的内容,但是每个帖子都有复杂的渲染过程,所以采用了一种取巧的办法: ajax 。 对每个帖子单独请求一个子页面,子页面复制自 viewthread.php 。

遇到问题: 编辑模板后登录不能

=====

问题表现:登录后显示登录成功,但是跳转后又变成未登录状态。

问题原因:修改过 footer.htm ,去掉了 {eval updatesession();} ,重新加上就好了。

这个例子充分暴露了Discuz代码混乱无逻辑的特点。

显示无格式的内容预览

====

Discuz存储帖子的内容,在 posts 表里的 message 字段,保存成 bbcode 的格式,就是 [size=4]文字[/size] 这样的格式,Discuz在 .include/discuzcode.func.php 中有个 discuzcode() 函数,专门用来渲染成最终的HTML格式。我的需求是去掉它的格式显示,因为一列帖子预览排在一起,如果带格式的话会非常乱。复制修改这个渲染函数,把里面处理bbcode的正则表达式替换都改成空字符串。

你可能感兴趣的:(PHP,Ajax,工作,正则表达式)