自增标签的基本语法
自增标签的基本语法非常简单,它通常嵌套在 {dede:loop} 或 {dede:arclist} 等具有循环功能的标签内部。

[field:global.autoindex/]
global: 表示这是一个全局变量。autoindex: 是 DedeCMS 内置的变量名,代表“自动索引”,也就是从 1 开始递增的数字。
示例: 假设我们要输出一个带序号的列表:
<ul>
{dede:loop table='dede_archives' sort='id' row='5'}
<li>
序号:[field:global.autoindex/] - 标题:[field:title/]
</li>
{/dede:loop}
</ul>
输出结果可能如下:
<ul> <li>序号:1 - 标题:文章标题一</li> <li>序号:2 - 标题:文章标题二</li> <li>序号:3 - 标题:文章标题三</li> <li>序号:4 - 标题:文章标题四</li> <li>序号:5 - 标题:文章标题五</li> </ul>
自增标签的常用属性
[field:global.autoindex/] 标签本身也支持一些属性,使其功能更加强大和灵活。
runstart (起始值)
- 作用:指定自增数字的起始值。
- 语法:
[field:global.autoindex runstart='N'/] - 说明:
N是你希望开始的数字,默认为 1。
示例: 希望序号从 10 开始。

{dede:loop table='dede_archives' sort='id' row='3'}
<li>序号:[field:global.autoindex runstart='10/] - [field:title/]</li>
{/dede:loop}
输出结果:
<li>序号:10 - 文章标题一</li> <li>序号:11 - 文章标题二</li> <li>序号:12 - 文章标题三</li>
style (样式)
style 属性非常实用,它可以根据当前的序号返回不同的值,实现更复杂的逻辑。
a. style='text' (默认)
直接返回数字本身,和 autoindex 效果一样。
b. style='dot' (加点)
在数字前加一个点,常用于制作无序列表的序号。
{dede:loop table='dede_archives' sort='id' row='3'}
<li>[field:global.autoindex style='dot/'] [field:title/]</li>
{/dede:loop}
输出结果:
<li>. 文章标题一</li> <li>. 文章标题二</li> <li>. 文章标题三</li>
c. style='lower-roman' (小写罗马数字)
将数字转换为小写罗马数字(i, ii, iii, iv...)。
d. style='upper-roman' (大写罗马数字)
将数字转换为大写罗马数字。
e. style='lower-alpha' (小写字母)
将数字转换为小写字母(a, b, c, d...)。
f. style='upper-alpha' (大写字母)
将数字转换为大写字母。
示例: 使用大写字母作为序号。
{dede:loop table='dede_archives' sort='id' row='3'}
<li>[field:global.autoindex style='upper-alpha/'] [field:title/]</li>
{/dede:loop}
输出结果:
<li>A 文章标题一</li> <li>B 文章标题二</li> <li>C 文章标题三</li>
自增标签的实际应用场景
自增标签在实际模板制作中非常常见,以下是几个典型的应用。
制作带序号的列表
这是最基本的应用,如前面所示。
<ol>
{dede:arclist row='5' titlelen='30'}
<li>[field:global.autoindex/]. [field:title/]</li>
{/dede:arclist}
</ol>
实现隔行换色效果
通过判断 autoindex 的奇偶性,给 li 或 tr 元素添加不同的 CSS 类名。
<ul>
{dede:arclist row='5' titlelen='30'}
<li class="[field:global.autoindex function="(@me % 2 == 0) ? 'even' : 'odd';" /]">
[field:title/]
</li>
{/dede:arclist}
</ul>
代码解释:
function="(@me % 2 == 0) ? 'even' : 'odd';"是一个 PHP 函数。@me代表autoindex当前的值。% 2是取模运算,判断是否能被 2 整除。? 'even' : 'odd'是三元运算符。@me % 2 == 0成立(即偶数),则返回'even',否则返回'odd'。- 这样,第 2、4、6... 条目会拥有
class="even",第 1、3、5... 条目会拥有class="odd"。
然后在 CSS 中定义样式:
li.odd { background-color: #f9f9f9; }
li.even { background-color: #ffffff; }
为分页生成页码
在分页模板(通常是 list_paget.htm)中,[field:global.autoindex/] 代表当前页码。
<div class="dede_pages">
<ul>
<li><a href="javascript:;" class="prev">上一页</a></li>
{dede:pagelist listsize='4' listitem='info,index,next,end'}
<li><a href="[field:link/]">[field:global.autoindex/]</a></li>
{/dede:pagelist}
<li><a href="javascript:;" class="next">下一页</a></li>
</ul>
</div>
注意:在这个场景下,[field:global.autoindex/] 是由 {dede:pagelist} 标签控制的,它代表的是分页列表中每一项的序号,而不是文章的 ID。
制作多列布局
利用 autoindex 来控制列的显示,例如每 3 个项目换一行。
<div class="row">
{dede:arclist row='9' titlelen='20'}
[field:global.autoindex runstart='1'/]
<!-- 判断是否是第3的倍数,如果是则换行 -->
[field:global.autoindex function="(@me % 3 == 0) ? '</div><div class="row">' : '';" /]
<div class="col">
<h3>[field:title/]</h3>
</div>
{/dede:arclist}
</div>
代码解释:
runstart='1'确保从 1 开始计算。function="(@me % 3 == 0) ? '</div><div class="row">' : '';"同样是利用取模运算。- 当序号是 3、6、9... 时,会输出
</div><div class="row">,从而实现每 3 个col元素后关闭并重新开启一个row容器。
注意事项
- 必须嵌套在循环标签内:
[field:global.autoindex/]本身没有循环能力,它必须被{dede:loop}、{dede:arclist}、{dede:channelartlist}等循环标签包裹才能生效。 - 作用域:
autoindex的计数范围仅限于它所在的那个循环标签内部,如果有多层嵌套循环,每一层都有自己独立的autoindex计数器。 - 性能:对于简单的奇偶判断或样式转换,使用
function属性是方便的,但如果逻辑非常复杂,可能会对页面加载速度有轻微影响,对于绝大多数情况,这都不是问题。
| 功能 | 标签写法 | 说明 |
|---|---|---|
| 基本自增 | [field:global.autoindex/] |
从 1 开始递增,输出 1, 2, 3... |
| 指定起始值 | [field:global.autoindex runstart='10'/] |
从 10 开始递增,输出 10, 11, 12... |
| 加点序号 | [field:global.autoindex style='dot'/] |
输出 .1, .2, .3... |
| 小写字母 | [field:global.autoindex style='lower-alpha'/] |
输出 a, b, c... |
| 大写字母 | [field:global.autoindex style='upper-alpha'/] |
输出 A, B, C... |
| 奇偶判断 | [field:global.autoindex function='(@me%2==0)?"even":"odd";'/] |
用于隔行换色等场景。 |
掌握 autoindex 标签是 DedeCMS 模板开发的基础,希望这份详细的讲解能帮助你更好地使用它。
