dede channel 自增

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 DEDE建站 正文

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

dede channel 自增
(图片来源网络,侵删)
  1. 栏目ID(id字段)的自增:这是数据库层面的自增,由系统自动管理,用户无法干预,这是最核心、最基础的自增。
  2. 自定义排序/编号(如 sortrank 字段)的自增:这是用户在后台手动设置的排序值,用于控制栏目在前台的显示顺序,用户可以自由地让它“自增”或进行任何排序。

下面我将分别对这两种情况进行详细说明。


栏目ID (id) 的自增 (数据库层面)

这是 DedeCMS 的核心机制,完全由系统自动控制,用户无需也无法修改

工作原理

  • 数据表:栏目信息存储在数据库的 #@__arctype 表中。
  • 关键字段id (INT类型,主键,自增)
  • 行为:当你通过 DedeCMS 后台创建一个新栏目时,系统会向 #@__arctype 表中插入一条新记录,数据库会自动为新记录的 id 字段分配一个比当前最大 id 大 1 的值,这个过程是原子性的,保证了每个栏目的 id 都是独一无二的。

如何查看?

  1. 登录你的网站数据库管理工具(如 phpMyAdmin)。
  2. 找到你的 DedeCMS 数据库。
  3. 点击 #@__arctype 表(实际名称可能是 dede_arctype 或你前缀加 arctype)。
  4. 查看表结构,你会看到 id 字段的定义中有一项 AUTO_INCREMENT(自增),这就是标识。

用户可以做什么?

  • 不能手动设置:你在后台添加栏目时,无法指定 id,它是自动生成的。
  • 不能修改:在正常情况下,你也不能修改已有栏目的 id,强行修改数据库可能会导致网站数据错乱(文章关联的栏目ID就找不到了)。
  • 不能重置:你不能让 id 从 1 重新开始计数,一旦删除了某个栏目,它的 id 就被永久“占用”了,新创建的栏目会使用下一个可用的 id

栏目ID的自增是 DedeCMS 的基础功能,由数据库自动管理,用户无需关心,也不应该尝试手动干预


栏目排序/编号 (sortrank) 的自增 (用户控制)

这才是你在后台能实际操作的“自增”,它决定了栏目在列表中的显示顺序。

dede channel 自增
(图片来源网络,侵删)

工作原理

  • 数据表:同样在 #@__arctype 表中。
  • 关键字段sortrank (INT类型,默认为0)
  • 行为sortrank 字段专门用于排序。数值越大,排序越靠前,默认情况下,所有栏目的 sortrank 都是 0,所以它们是按 id 升序排列的。

如何实现“自增”排序?

假设你希望新建的栏目总是排在列表的最后(即按创建顺序升序排列),你可以手动为每个新栏目的 sortrank 设置一个递增的值。

手动方法(不推荐,栏目多时很麻烦):

  1. 在后台添加第一个栏目,不修改 sortrank,保持默认 0。
  2. 添加第二个栏目,在“基本设置”里找到“排序”或类似字段,将其值设为 1。
  3. 添加第三个栏目,将其 sortrank 设为 2。
  4. 以此类推...

推荐方法:使用 DedeCMS 的列表功能

DedeCMS 的栏目列表本身就有排序功能,你不需要手动设置 sortrank 来实现升序或降序。

  1. 进入后台 -> 内容管理 -> 栏目管理
  2. 在栏目列表页面,你会看到列表的表头,如“ID”、“栏目名称”、“排序”等。
  3. 点击 “排序” 这个表头的链接,列表会按照 sortrank 字段的值进行排序,默认是升序(从小到大),也就是你想要的“自增”效果(新创建的 sortrank 为0或较小值的会排在后面)。
  4. 如果你希望排在前面的排在最上面,可以点击 “排序” 表头使其变为降序(从大到小)。

通过修改默认值实现“自动自增”

如果你想让所有新创建的栏目,其 sortrank 默认就有一个递增的值,你需要修改 DedeCMS 的核心文件。(注意:修改核心文件有风险,请提前备份!)

  1. 定位文件:找到并打开 /dede/catalog_add.php 文件,这个文件是处理“添加栏目”逻辑的。

  2. 查找代码:在文件中找到 $dsql->ExecuteNoneQuery($query); 这行代码之前的位置,这里是在插入数据库之前。

  3. 添加代码:在上述位置之前,添加以下 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 作为默认值。
  4. 保存文件:保存修改后的 catalog_add.php 文件。

经过以上修改,以后你每添加一个新栏目,它的 sortrank 就会自动比上一个栏目大 1,从而实现“自增”排序,新栏目会自动排在列表的最后。


特性 栏目ID (id) 栏目排序 (sortrank)
控制方 数据库系统 用户(管理员)
目的 唯一标识每个栏目 控制栏目在前台的显示顺序
如何修改 不可手动修改,系统自动分配 可在后台手动设置,或通过代码修改默认行为
实现方式 数据库 AUTO_INCREMENT 用户输入值,或通过 SQL MAX() + 1 计算
推荐操作 切勿手动修改 使用后台列表的排序功能,或通过修改核心代码实现自动递增

对于绝大多数用户来说,只需要理解并使用后台的列表排序功能就足够了,只有在有非常特殊的需求(需要一个固定的、连续的编号序列用于其他系统对接)时,才需要考虑修改核心文件来实现 sortrank 的自动递增。

-- 展开阅读全文 --
头像
织梦如何调用二级子栏目id?
« 上一篇 01-06
ueditor七牛dede如何实现上传存储?
下一篇 » 01-06

相关文章

取消
微信二维码
支付宝二维码

目录[+]