dede channel从1开始,如何正确设置起始ID?

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

您想让新添加的栏目从1开始,覆盖旧的ID

这种情况通常发生在您清空了所有栏目,希望新建立的栏目ID从1、2、3...重新排列,而不是接着之前的ID继续(比如从100开始)。

dede channel 从1开始
(图片来源网络,侵删)

核心原理: DedeCMS的栏目ID是主键,自增的,您无法直接修改数据库让它“重置”自增ID,您可以清空栏目数据表,并重置其自增ID的起始值,这样再添加新栏目时,ID就会从1开始了。

⚠️ 重要警告: 此操作会永久删除您网站上的所有栏目及其所有子栏目、文章、图集等所有关联数据!请务必提前备份您的数据库!

操作步骤 (通过phpMyAdmin等数据库管理工具):

  1. 备份数据库: 这是最重要的一步,防止误操作导致数据丢失。
  2. 登录phpMyAdmin: 找到您DedeCMS所在数据库。
  3. 找到栏目表: DedeCMS的栏目数据表通常名为 #@_arctype (#@_ 是您在配置文件中定义的前缀,默认是 dede_)。
  4. 清空表数据:
    • #@_arctype 表上点击“清空”(Empty)按钮,这会删除所有行,但保留表结构。
  5. 重置自增ID:
    • #@_arctype 表上,点击“操作”(Operations)选项卡。
    • 在“表选项”(Table options)中,找到“自增”(AUTO_INCREMENT)。
    • 在输入框中填入 1
    • 点击“执行”(Go)。

完成以上步骤后, 您再去DedeCMS后台添加新栏目,第一个栏目的ID就会是 1,第二个是 2,以此类推。

dede channel 从1开始
(图片来源网络,侵删)

您想在模板调用时,让栏目的显示序号从1开始

这种情况更常见,您的栏目ID可能是 5, 6, 7,但在页面上显示时,您希望它们是 1, 2, 3,这通常用于循环列表,栏目一”、“栏目二”。

核心原理: 在DedeCMS的模板标签中,使用 {/dede:channel}{dede:channelartlist} 等循环标签时,系统会自动提供一个变量 @mefield.global.autoindex 来记录当前的循环次数,这个变量默认就是从 0 开始的,我们只需要将它加 1 即可。

解决方案:

在您的模板文件(通常是 templets/default/ 目录下的文件)中,找到调用栏目的代码,进行如下修改:

dede channel 从1开始
(图片来源网络,侵删)

对于 {dede:channel}

这是最常用的调用一级栏目的标签。

原始代码 (序号从0开始):

{dede:channel type='top' row='8'}
    <li>
        <a href="[field:typelink/]">[field:typename/]</a>
        <!-- 这里的 {/dede:channel} 会循环8次 -->
    </li>
{/dede:channel}

修改后代码 (序号从1开始):

使用 field.global.autoindex + 1

{dede:channel type='top' row='8'}
    <li>
        <!-- 显示序号,1, 2, 3... -->
        <span>栏目[field:global.autoindex/]</span>
        <a href="[field:typelink/]">[field:typename/]</a>
    </li>
{/dede:channel}

注意: field.global.autoindex 是在 {dede:channel} 标签内部可用的全局变量,它从 0 开始计数。


对于 {dede:channelartlist}

这个标签用于调用顶级栏目及其子栏目。

原始代码:

{dede:channelartlist row='4'}
    <div class="channel-item">
        <h2><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h2>
        {dede:channel type='son' noself='yes'}
            <a href="[field:typelink/]">[field:typename/]</a>
        {/dede:channel}
    </div>
{/dede:channelartlist}

修改后代码 (让顶级栏目的序号从1开始):

顶级栏目的序号使用 field.global.autoindex + 1

{dede:channelartlist row='4'}
    <div class="channel-item">
        <!-- 顶级栏目序号,1, 2, 3, 4 -->
        <h2><span>栏目[field:global.autoindex/]</span><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h2>
        <!-- 子栏目循环,序号也从1开始 -->
        {dede:channel type='son' noself='yes'}
            <a href="[field:typelink/]">[field:typename/]</a>
        {/dede:channel}
    </div>
{/dede:channelartlist}

修改后代码 (让子栏目的序号从1开始):

子栏目循环 {dede:channel} 内部,同样使用 field.global.autoindex + 1

{dede:channelartlist row='4'}
    <div class="channel-item">
        <h2><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h2>
        <ul>
            {dede:channel type='son' noself='yes'}
                <li>
                    <!-- 子栏目序号,1, 2, 3... -->
                    <span>子栏目[field:global.autoindex/]</span>
                    <a href="[field:typelink/]">[field:typename/]</a>
                </li>
            {/dede:channel}
        </ul>
    </div>
{/dede:channelartlist}

  • 想重置数据库ID本身: 需要清空 #@_arctype 表并重置自增ID(危险操作,务必备份)。
  • 想在页面上显示序号从1开始: 这是最常见的需求,直接在模板中使用 {field:global.autoindex/}[@me + 1] 即可轻松实现,无需修改数据库。

根据您的实际需求选择对应的解决方案即可,希望这能帮到您!

-- 展开阅读全文 --
头像
pragma vector在C语言中如何使用?
« 上一篇 2025-12-17
C语言continue在case语句中为何会报错?
下一篇 » 2025-12-17

相关文章

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