autoindex是织梦CMS中一个非常核心且强大的内置变量,主要用于在循环列表(如arclist、list等标签)中,为每一项内容自动生成一个序号,这个序号可以是简单的数字,也可以是更复杂的格式,如“第X条”、“共Y条”等。

autoindex 的基本作用
想象一下,你有一个文章列表,想在每篇文章前面加上序号,
- 一
- 二
- 三
手动给每篇文章加数字非常麻烦,而且如果增删了文章,序号就会错乱。autoindex就是为了解决这个问题而生的,它会自动追踪当前循环到了第几条,并输出对应的序号。
autoindex 的基本用法
autoindex通常与循环标签一起使用,最常见的场景是在[field:global.autoindex/]中调用。
示例:简单的文章列表编号
在arclist或list标签的循环体内,直接使用[field:global.autoindex/]。

{dede:arclist titlelen='30' row='5'}
<li>
[field:global.autoindex/]、[field:title/]
</li>
{/dede:arclist}
输出结果:
<li>
1、这是第一篇文章的标题
</li>
<li>
2、这是第二篇文章的标题
</li>
<li>
3、这是第三篇文章的标题
</li>
<li>
4、这是第四篇文章的标题
</li>
<li>
5、这是第五篇文章的标题
</li>
autoindex 的核心属性
autoindex的真正威力在于它的属性,可以让你对序号进行各种自定义,这些属性通常通过[field:global name='autoindex' 属性='值'/]这种方式来调用。
start - 设置起始值
用于定义序号的起始数字,默认为1。
示例:让序号从10开始

{dede:arclist titlelen='30' row='5'}
<li>
[field:global name='autoindex' start='10'/]、[field:title/]
</li>
{/dede:arclist}
输出结果:
<li>
10、这是第一篇文章的标题
</li>
<li>
11、这是第二篇文章的标题
</li>
...
type - 设置序号类型
这是最常用的属性,可以控制序号的显示格式。
self(默认): 纯数字,如1, 2, 3...chinese: 中文数字,如一, 二, 三...chinese1: 中文数字带“第”和“条”,如第一条, 第二条...decimal: 数字带点,如, 2., 3...lower-roman: 小写罗马数字,如i, ii, iii...upper-roman: 大写罗马数字,如I, II, III...lower-alpha: 小写字母,如a, b, c...upper-alpha: 大写字母,如A, B, C...
示例:使用中文数字
{dede:arclist titlelen='30' row='5'}
<li>
[field:global name='autoindex' type='chinese1'/]、[field:title/]
</li>
{/dede:arclist}
输出结果:
<li>
第一条、这是第一篇文章的标题
</li>
<li>
第二条、这是第二篇文章的标题
</li>
...
reid - 重置序号
当需要在一个页面内显示多个列表,并希望每个列表的序号都从1开始时,这个属性就非常有用,它的值是列表的id,只要不同列表的id不同,序号就会在各自列表内重新计算。
示例:两个独立的列表,都从1开始编号
<!-- 列表一 -->
<h3>最新文章</h3>
<ul>
{dede:arclist titlelen='30' row='3' id='newlist'}
<li>
[field:global name='autoindex'/]、[field:title/]
</li>
{/dede:arclist}
</ul>
<!-- 列表二 -->
<h3>热门文章</h3>
<ul>
{dede:arclist titlelen='30' row='3' id='hotlist'}
<li>
[field:global name='autoindex'/]、[field:title/]
</li>
{/dede:arclist}
</ul>
输出结果:
<h3>最新文章</h3>
<ul>
<li>1、最新文章标题一</li>
<li>2、最新文章标题二</li>
<li>3、最新文章标题三</li>
</ul>
<h3>热门文章</h3>
<ul>
<li>1、热门文章标题一</li>
<li>2、热门文章标题二</li>
<li>3、热门文章标题三</li>
</ul>
如果不使用reid(或不同的id),第二个列表会接着第一个列表继续编号(4, 5, 6...)。
高级应用与技巧
显示总条数 totalitem
有时我们想显示类似“共10条,当前第1条”这样的信息,这需要结合[field:global name='itemindex'/](当前项索引)和[field:global name='totalitem'/](总条数)来实现。
[field:global name='itemindex'/]: 和autoindex类似,但更侧重于“索引”,通常从0开始(除非用start属性改变)。[field:global name='totalitem'/]: 获取当前循环列表的总条数。
示例:显示“共X条,第Y条”
{dede:arclist titlelen='30' row='5'}
<li>
共[field:global name='totalitem'/]条,第[field:global name='autoindex'/]条:[field:title/]
</li>
{/dede:arclist}
注意:totalitem需要在循环标签内使用,并且它依赖于arclist或list标签的row属性或实际查询到的结果数量。
奇偶行样式(隔行变色)
利用autoindex的奇偶性,可以轻松实现隔行变色效果。
示例:奇数行背景为白色,偶数行背景为灰色
<style>
.list-item:nth-child(even) {
background-color: #f0f0f0;
}
</style>
<ul>
{dede:arclist titlelen='30' row='10'}
<li class="list-item">
[field:global name='autoindex'/]、[field:title/]
</li>
{/dede:arclist}
</ul>
每隔N条添加一个分隔符或特殊样式
可以使用autoindex的mod功能(通过php代码实现)来判断序号是否能被某个数整除。
示例:每3条文章后加一个横线 <hr>
{dede:arclist titlelen='30' row='10'}
[field:title/]
<!-- 当 (autoindex % 3 == 0) 且不是最后一条时,输出hr -->
[field:global name='autoindex' runphp='yes']
if(@me % 3 == 0 && @me < $GLOBALS['item_nums']) {
@me = '<hr>';
} else {
@me = '';
}
[/field:global]
{/dede:arclist}
runphp='yes': 启用PHP代码执行。@me: 代表当前标签的值,这里是autoindex的值。$GLOBALS['item_nums']: 获取当前循环的总条数,用于判断是否是最后一条。
注意事项
- 作用域:
autoindex只在循环标签(如arclist,list,channelartlist等)的内部有效,在循环标签外部使用,它要么没有值,要么是全局的累加值,通常不是你想要的结果。 - 性能: 在极其庞大的列表(如成千上万条)中,使用复杂的
runphp逻辑可能会对页面加载速度产生轻微影响,但对于常规网站,这种影响可以忽略不计。 reid的重要性: 在模板中如果存在多个并列的列表,务必给它们设置不同的id属性,以确保autoindex能正确重置,避免序号错乱。
autoindex是织梦CMS模板开发中不可或缺的工具,掌握它的基本用法和核心属性(start, type, reid),可以让你非常灵活地控制列表的序号显示,从而实现各种复杂的页面布局和样式需求,从简单的数字编号到复杂的分页逻辑和样式控制,autoindex都能胜任。
