具有树状结构的文本论坛(一)——总体设计

    这个论坛是我用四个工作日写的,它基于文本文件,用PHP写成,具有以下几个主要特点:
一、论坛具有树状结构。创建新主题的帖子成为“树干”,回复它的帖子自动成为“树枝”,而每个“树枝”被回复时又会生成新的小分支...
二、该论坛支持UBB。
三、提供主题搜索功能,可以根据主题、创建人名字、创建时间等进行搜索。
四、方便的自动注册系统。初次使用也只要求输入名字和密码,就自动注册,下次就可以用同样的密码来登录该名字。
五、管理员或发帖人可以随时修改、删除帖子。
六、该论坛支持全部的OICQ头像,一共有66个。
感兴趣的朋友可以到这个地址看看它的演示:http://youziyun.oso.com.cn/forum/forum.php
    下面开始介绍这个论坛的设计思路和实现代码。
    该论坛的内部文件组织是这样的:把所有的主题ID、主题、创建人、创建时间、帖子数记录在一个主题列表文件中。文件名是themelist,其格式是:
总主题数
总帖子数
1    标题    创建人    创建时间    该主题中的帖子数目
2    ...    ...    ...    ...
3    ...    ...    ...    ...
.
.
其中各项之间用TAB跳位符隔开。刚进入论坛时看到的界面就是把themelist文件中的内容列出(当然,是要分页显示的)。
而列表中的每一个主题都对应一个单独的文件,文件名就是主题的ID号。这个文件记录了该主题中所有帖子的内容,其格式如下:
0.    标题    脸谱序号    发帖人    发帖时间    发帖人的IP    OICQ号码    e-mail地址    个人主页地址    帖子正文内容
0.01    标题    脸谱序号    发帖人    发帖时间    发帖人的IP    OICQ号码    e-mail地址    个人主页地址    帖子正文内容
0.02    标题    脸谱序号    发帖人    发帖时间    发帖人的IP    OICQ号码    e-mail地址    个人主页地址    帖子正文内容
0.0101    标题    脸谱序号    发帖人    发帖时间    发帖人的IP    OICQ号码    e-mail地址    个人主页地址    帖子正文内容
其中各项之间也是用TAB跳位符隔开。注意到每行最前面的字符串,它看起来象是一个小数,其实它就是每个帖子的ID。采用这种形式ID,是很特别的设计。其目的就是为了在对帖子ID进行升序排序时能把帖子之间的树状关系反映出来。
这种ID的命名规则是:主题的根帖子的ID都是"0.",回复它的帖子ID依次为"0.01"、"0.02",而回复ID为"0.01"帖子的ID依次为"0.0101"、"0.0102",以此类推...
这样,当在这个主题中回复任何一个帖子时,只要把新帖子的信息写在最后就可以了,显示的时候,把各帖子按ID升序排列再显示出来,就能反映出树状结构来。当然,如果对某个帖子回复99次以上,ID排序会出现错误,但是这种情况几乎不会发生,而且即使发生也不会有更大的破坏。
    还有一个文件是管理用户名和密码的,格式为;
用户名1    密码1
用户名2    密码2
.........
程序通过读取该文件信息,和用户输入信息来比较,相同则登录成功。为了让用户操作简便,这个论坛的注册是自动进行的,第一次输入用户名时会自动将该名字注册,下次用这个名字也要输入同样密码才行。
    这几种文件格式定下来之后,就可以开始实现整个论坛了。整个论坛可以分为用户登录部分、主题列表部分、主题内容显示部分、回复主题部分、新创主题部分、主题搜索部分、帖子编辑/删除部分。下面是该论坛程序的文件列表:
forum.php    主体程序文件
funcdef.php    常数和函数定义文件
listtheme.php    列出所有主题
loginerr.php    当登录错误时显示的文件
listtree.php    把某一主题中所有帖子显示出来
addnew.php    加新主题时显示的界面的文件
reply.php    回复帖子界面文件
edit.php    编辑帖子界面文件
search.php    搜索主题界面文件

    下次将介绍主程序的框架结构。(未完待续)