这个针对的是现在的CVS主分支代码。如果是1.2.1的话,site.c里面那几个常量
的类型可能不一样,少一个const可能
$Id: README.SYSOP,v 1.19 2004/10/07 08:01:26 atppp Exp $
0 ChangeLog 主要修改记录
2004.9.22
atppp - 加入分类讨论区修改说明。感谢 wuweixin @ 白山黑水 BBS
6 修改分类讨论区
修改站点的分类讨论区一般来说有两个步骤,一是需要修改站点的配置文件,二是需
要改动代码。配置文件的修改主要和用户界面有关,而源代码的修改主要和统计程序以及
站务管理有关。
6.1 修改站点配置文件
需要改动的文件是 ~bbs/etc/menu.ini 和 web 主目录下面的 site.php。下面是
menu.ini 分类讨论区子菜单的一个简略形式,后面的讲解将都以此为例:
#------------------------------------------------------------------
%menu M_EGROUP
title 0, 0, "分类讨论区选单"
screen 3, 0, S_EGROUP
@EGroups 10, 22, 0, "0BBS", "(0) 本站系统 [本站]"
@EGroups 0, 0, 0, "1USA", "(1) 人在美国 [校园][创业]"
@EGroups 0, 0, 0, "2GoAbroad", "(2) 大话西游 [留学][学校][团体]"
@BoardsNew 0, 0, 0, "New", "(N) 阅读新文章"
!.. 0, 0, 0, "Exit", "(E) 回到主选单"
%
EGROUP0 = "a"
EGROUP1 = "b"
EGROUP2 = "c"
#------------------------------------------------------------------
这里需要注意的地方是:分类讨论区菜单的第 5 个参数的第一个字母是序列号,这个序
列号通过下面的 EGROUP? 来定义分区代号(一般是一个字母或数字)。比如这里的第一
个分类讨论区“本站系统”,序列号是 0,分区代号是 a(由 EGROUP0 定义)。注意:
序列号只是 menu.ini 内部引用使用,没有任何别的用处!后面的修改,以及新建和修改
讨论区都只需要知道分区代号即可,在这个例子中,三个分区代号分别是 a b c。
一般可以把序列号和分区代号设置成一样。
改完 menu.ini 参考 4.3 节使之生效。(站务在主菜单按~)
另一个需要修改的配置文件是 site.php,上面的例子就需要在 site.php 内用下面
的代码:
$section_nums = array("a", "b", "c");
$section_names = array(
array("本站系统", "[本站]"),
array("人在美国", "[校园][创业]"),
array("大话西游", "[留学][学校][团体]")
);
6.2 修改源代码
修改分类讨论区需要修改站点的 site.c 和 site.h 文件。不推荐直接修改
default.h 和 default.c 文件。
smthbbs 系统有一个 ~bbs/0Announce/groups/ 目录,这是版面精华区的总目录,该
目录下存放所有版面的精华区。一般站点希望版面分区结构和精华区分区结构完全一致。
以上面的例子为例,一共三个分类讨论区,那么讨论区精华的总目录下应该有三个目录,
我们把它们分别取名为 GROUP_0 GROUP_1 GROUP_2。修改分类讨论区往往会需要修改精华
区结构,所以修改完分类讨论区之后站务应该进入精华区调整,比如建立目录,修改
.Names 文件等。特别是 ~bbs/0Announce/groups/.Names 文件应该是类似这样的内容:
#
# Title=讨论区精华
#
Name=本站系统
Attach=0
Path=~/GROUP_0
Numb=1
#
Name=人在美国
Attach=0
Path=~/GROUP_1
Numb=2
#
Name=大话西游
Attach=0
Path=~/GROUP_2
Numb=3
#
源代码的修改首先是 site.h 里面的 SECNUM 常数,它应该定义为分类讨论区数量:
#define SECNUM 3
剩下的修改都在 site.c 里面了,为此确保 site.h 没有定义 USE_DEFAULT_SECODE。
site.c 内一共有四个常量和分类讨论区有关,请注意常量的类型定义绝不能改。
const char seccode[SECNUM][5] = {"a", "b", "c"};
这个是分区代号,部分统计程序需要用到。
const char * const explain[] = {
"本站系统",
"人在美国",
"大话西游",
NULL
};
分类讨论区的区名,web 下的站点管理会用到。最后的 NULL 不能漏!
const char * const groups[] = {
"GROUP_0",
"GROUP_1",
"GROUP_2",
NULL
};
精华区总目录下相应分区的目录名,开版和修改版面设定的时候会用到。
最后的 NULL 不能漏!
const char secname[SECNUM][2][20] = {
{"本站系统", "[本站]"},
{"人在美国", "[校园][创业]"},
{"大话西游", "[留学][学校][团体]"},
};
分类讨论区说明,就按照这个格式依样画葫芦好了。实际上只有 secname[i][0] 才
真正在程序中用到,目的是开版和修改版面精华区位置的时候提示选择用。
另一个需要注意的问题是,每个版面的精华区目录位置都是完全独立储存的,和上面
的修改毫无关系。所以像上面的例子,如果我们决定把 GROUP_0 的目录名改掉,那样的
话不但要进行类似上面所述的修改,而且精华区位于 GROUP_0 目录内的版面都应该要进
入系统管理菜单重新设定讨论区,选择移动精华区位置,指定新的目录。
修改源代码之后需要重新编译安装 BBS 程序。可以看到源代码的修改只和管理操作
和统计程序相关,所以在实际操作中,如果是减少分区数目或者修改分类讨论区说明,可
以仅调整 menu.ini 和 site.php,而不修改源代码。
--
修改:atppp FROM 128.12.181.*
FROM 128.12.181.*