在 DedeCMS 中,“栏目自增”通常有两种理解:

- 栏目ID(
id字段)的自增:这是数据库层面的自增,由系统自动管理,用户无法干预,这是最核心、最基础的自增。 - 自定义排序/编号(如
sortrank字段)的自增:这是用户在后台手动设置的排序值,用于控制栏目在前台的显示顺序,用户可以自由地让它“自增”或进行任何排序。
下面我将分别对这两种情况进行详细说明。
栏目ID (id) 的自增 (数据库层面)
这是 DedeCMS 的核心机制,完全由系统自动控制,用户无需也无法修改。
工作原理
- 数据表:栏目信息存储在数据库的
#@__arctype表中。 - 关键字段:
id(INT类型,主键,自增) - 行为:当你通过 DedeCMS 后台创建一个新栏目时,系统会向
#@__arctype表中插入一条新记录,数据库会自动为新记录的id字段分配一个比当前最大id大 1 的值,这个过程是原子性的,保证了每个栏目的id都是独一无二的。
如何查看?
- 登录你的网站数据库管理工具(如 phpMyAdmin)。
- 找到你的 DedeCMS 数据库。
- 点击
#@__arctype表(实际名称可能是dede_arctype或你前缀加arctype)。 - 查看表结构,你会看到
id字段的定义中有一项AUTO_INCREMENT(自增),这就是标识。
用户可以做什么?
- 不能手动设置:你在后台添加栏目时,无法指定
id,它是自动生成的。 - 不能修改:在正常情况下,你也不能修改已有栏目的
id,强行修改数据库可能会导致网站数据错乱(文章关联的栏目ID就找不到了)。 - 不能重置:你不能让
id从 1 重新开始计数,一旦删除了某个栏目,它的id就被永久“占用”了,新创建的栏目会使用下一个可用的id。
栏目ID的自增是 DedeCMS 的基础功能,由数据库自动管理,用户无需关心,也不应该尝试手动干预。
栏目排序/编号 (sortrank) 的自增 (用户控制)
这才是你在后台能实际操作的“自增”,它决定了栏目在列表中的显示顺序。

工作原理
- 数据表:同样在
#@__arctype表中。 - 关键字段:
sortrank(INT类型,默认为0) - 行为:
sortrank字段专门用于排序。数值越大,排序越靠前,默认情况下,所有栏目的sortrank都是 0,所以它们是按id升序排列的。
如何实现“自增”排序?
假设你希望新建的栏目总是排在列表的最后(即按创建顺序升序排列),你可以手动为每个新栏目的 sortrank 设置一个递增的值。
手动方法(不推荐,栏目多时很麻烦):
- 在后台添加第一个栏目,不修改
sortrank,保持默认 0。 - 添加第二个栏目,在“基本设置”里找到“排序”或类似字段,将其值设为 1。
- 添加第三个栏目,将其
sortrank设为 2。 - 以此类推...
推荐方法:使用 DedeCMS 的列表功能
DedeCMS 的栏目列表本身就有排序功能,你不需要手动设置 sortrank 来实现升序或降序。
- 进入后台 -> 内容管理 -> 栏目管理。
- 在栏目列表页面,你会看到列表的表头,如“ID”、“栏目名称”、“排序”等。
- 点击 “排序” 这个表头的链接,列表会按照
sortrank字段的值进行排序,默认是升序(从小到大),也就是你想要的“自增”效果(新创建的sortrank为0或较小值的会排在后面)。 - 如果你希望排在前面的排在最上面,可以点击 “排序” 表头使其变为降序(从大到小)。
通过修改默认值实现“自动自增”
如果你想让所有新创建的栏目,其 sortrank 默认就有一个递增的值,你需要修改 DedeCMS 的核心文件。(注意:修改核心文件有风险,请提前备份!)
-
定位文件:找到并打开
/dede/catalog_add.php文件,这个文件是处理“添加栏目”逻辑的。 -
查找代码:在文件中找到
$dsql->ExecuteNoneQuery($query);这行代码之前的位置,这里是在插入数据库之前。 -
添加代码:在上述位置之前,添加以下 PHP 代码:
// 获取当前最大的 sortrank 值 $sortrank_query = "SELECT MAX(sortrank) as max_sortrank FROM `#@__arctype`"; $sortrank_row = $dsql->GetOne($sortrank_query); $new_sortrank = $sortrank_row['max_sortrank'] + 1; // 将新的 sortrank 值添加到 $query 中 // 假设你的 $query 变量是这样构建的: $query = "INSERT INTO `#@__arctype`( `reid`, `topid`, `sortrank`, `typename`, `typedir`, `... ... ) VALUES ( '$reid', '$topid', '$new_sortrank', '$typename', '$typedir', '... ... )";代码解释:
- 这段代码首先查询
#@__arctype表中sortrank的最大值。 - 然后将这个最大值加 1,得到一个新的
sortrank。 - 在向数据库插入新栏目记录时,使用这个计算出的
$new_sortrank作为默认值。
- 这段代码首先查询
-
保存文件:保存修改后的
catalog_add.php文件。
经过以上修改,以后你每添加一个新栏目,它的 sortrank 就会自动比上一个栏目大 1,从而实现“自增”排序,新栏目会自动排在列表的最后。
| 特性 | 栏目ID (id) |
栏目排序 (sortrank) |
|---|---|---|
| 控制方 | 数据库系统 | 用户(管理员) |
| 目的 | 唯一标识每个栏目 | 控制栏目在前台的显示顺序 |
| 如何修改 | 不可手动修改,系统自动分配 | 可在后台手动设置,或通过代码修改默认行为 |
| 实现方式 | 数据库 AUTO_INCREMENT |
用户输入值,或通过 SQL MAX() + 1 计算 |
| 推荐操作 | 切勿手动修改 | 使用后台列表的排序功能,或通过修改核心代码实现自动递增 |
对于绝大多数用户来说,只需要理解并使用后台的列表排序功能就足够了,只有在有非常特殊的需求(需要一个固定的、连续的编号序列用于其他系统对接)时,才需要考虑修改核心文件来实现 sortrank 的自动递增。
