{dede:autoindex} 是什么?
{dede:autoindex} 是一个 DedeCMS 的系统内置变量,它会在列表页循环输出每条数据时,自动递增一个数字。

- 作用场景:主要用于列表页模板(通常是
list_*.htm)。 - 核心功能:为列表中的每一条内容(文章、产品等)自动添加一个从 1 开始的序号。
基本用法
在列表页模板文件中,你可以直接在需要显示序号的地方插入这个标签。
示例代码:
{dede:list pagesize='10'}
<li>
<span>[field:global.autoindex/]</span> <!-- 方式一:使用 field 标签调用 -->
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
或者更直接地使用 autoindex 变量本身(在较新版本的 DedeCMS 中,直接使用 {dede:autoindex} 也是可以的,但推荐使用 [field:global.autoindex/] 以确保兼容性):
{dede:list pagesize='10'}
<li>
<span>{dede:autoindex/}</span> <!-- 方式二:直接使用标签 -->
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
输出效果:

假设列表有 10 条数据,页面渲染后的 HTML 将会是这样的:
<li>
<span>1</span>
<a href="/article/1.html">文章标题一</a>
</li>
<li>
<span>2</span>
<a href="/article/2.html">文章标题二</a>
</li>
...
<li>
<span>10</span>
<a href="/article/10.html">文章标题十</a>
</li>
高级用法与技巧
{dede:autoindex} 的真正强大之处在于它的修饰功能,可以通过在其后加上特定的符号来改变输出格式。
1 改变起始值
使用 start='数字' 属性可以指定序号的起始值。
语法:
{dede:autoindex start='起始值'}

示例: 想让序号从 10 开始计数。
{dede:list pagesize='10'}
<li>
<span>{dede:autoindex start='10'/}</span>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
输出效果: 序号将从 10, 11, 12... 开始。
2 添加前缀或后缀
使用 retype='格式' 属性可以自由定义序号的显示格式,非常灵活。
语法:
{dede:autoindex retype='自定义格式'}
示例 1:添加圆点和空格
retype=' . ' 会在数字后面添加一个点和一个空格。
{dede:list}
<li>
{dede:autoindex retype=' . '}
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
输出效果: 1 . 文章标题一, 2 . 文章标题二 ...
示例 2:添加括号
retype='() ' 会在数字后面添加一个右括号和一个空格。
{dede:list}
<li>
({dede:autoindex retype=') '})
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
输出效果: (1 ) 文章标题一, (2 ) 文章标题二 ...
3 自定义数字样式(如 01, 02, 03)
这是一个非常常见的需求,特别是当需要按数字顺序排列时,我们可以结合 PHP 的 sprintf 函数来实现。
实现方法:
在列表页模板中,使用 DedeCMS 的全局运行PHP代码功能 {dede:php}。
示例代码:
{dede:list pagesize='10'}
{dede:php}
// 定义一个变量来存储格式化后的序号
// %02d 表示:数字占2位,不足2位的前面补0
$formatted_index = sprintf("%02d", $GLOBALS['autoindex']);
{/dede:php}
<li>
<span>[field:global.autoindex/]</span> <!-- 显示原始序号 1, 2, 3... -->
<span style="color:red;">[field:php name=$formatted_index/]</span> <!-- 显示格式化后的序号 01, 02, 03... -->
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
代码解释:
{dede:php}...{/dede:php}:允许在模板中直接执行 PHP 代码。$GLOBALS['autoindex']:这是 DedeCMS 内部存储当前自动序号的 PHP 全局变量。sprintf("%02d", $number):这是一个强大的 PHP 函数,%02d的意思是:%d:表示这是一个十进制整数。2:表示总共占 2 个字符宽度。0:表示如果宽度不足,用0来填充,而不是默认的空格。
[field:php name=$formatted_index/]:这是调用刚刚在 PHP 代码块中生成的变量$formatted_index并显示在页面上。
输出效果:
<span>1</span> <span style="color:red;">01</span> 文章标题一
<span>2</span> <span style="color:red;">02</span> 文章标题二
...
注意事项
- 作用域:
{dede:autoindex}只在{dede:list}或{dede:arclist}等循环标签内部有效,在循环外部使用它将不会得到任何结果或显示 0。 - 分页问题:
autoindex的计数是基于当前页面的数据条数,而不是从所有数据的第一条开始,如果你需要实现全站不重复的序号(第一页 1-10,第二页 11-20...),这个标签是无法直接做到的,需要更复杂的逻辑,比如通过数据库获取总记录数然后计算。 - 模板引擎:确保你的 DedeCMS 版本支持这种标签写法,绝大多数标准版本的 DedeCMS 都支持。
- 推荐写法:虽然
{dede:autoindex/}可以直接使用,但在很多官方文档和实践中,使用[field:global.autoindex/]的形式更为常见和稳定,因为它明确地将其作为一个全局字段来调用。
| 功能 | 代码示例 | 说明 |
|---|---|---|
| 基本用法 | {dede:autoindex/} 或 [field:global.autoindex/] |
从 1 开始,每条记录序号加 1。 |
| 指定起始值 | {dede:autoindex start='10'/} |
序号从指定的数字开始递增。 |
| 添加后缀 | {dede:autoindex retype='、'/} |
在数字后添加指定的字符,如 1、 2、。 |
| 自定义格式 | 结合 sprintf 函数 |
实现复杂的格式化,如 01, 02 等。 |
掌握 {dede:autoindex} 的用法,特别是 start 和 retype 属性,以及结合 PHP 代码进行自定义格式化的技巧,可以让你在制作列表页时更加得心应手。
