一种是修改核心文件(不推荐,但最直接),另一种是使用织梦的模板标签(推荐,更安全、更灵活)。

修改核心文件(不推荐,但直接)
这个方法会直接修改织梦的程序文件,优点是一次修改,全站生效,但缺点是,下次织梦升级时,你需要重新修改这个文件,而且如果修改错误,可能会导致网站异常。
操作步骤:
-
找到核心文件: 打开织梦的安装目录,找到以下文件:
/include/common.func.php -
定位并修改代码: 在这个文件中,找到
autoindex函数的定义,它通常长这样:
(图片来源网络,侵删)// 全局通用函数库 if (!function_exists('autoindex')) { function autoindex($i) { return $i; } } -
修改为从1开始: 将函数体内的
return $i;修改为return $i + 1;。// 修改前 // function autoindex($i) { return $i; } // 修改后 if (!function_exists('autoindex')) { function autoindex($i) { return $i + 1; // 在原索引基础上加1 } } -
保存文件并更新缓存: 保存修改后的
common.func.php文件,然后登录织梦后台,点击“系统” -> “一键更新站点” -> “更新所有”,让新设置生效。
注意: 这种方法会影响所有使用 {dede:global name=autoindex/} 或 {dede:autoindex/} 的地方,如果你只想在某个特定列表里从1开始,请使用方法二。
使用织梦模板标签(推荐,最灵活)
这是最推荐的方法,因为它不修改任何核心文件,安全、可逆,并且可以精确控制每个列表的序号是否从1开始。

方案A:使用 {dede:global name=autoindex/} + field
这个方法适用于 dede:list 和 dede:arclist 标签中。autoindex 是循环的内部变量,从0开始,而 @me 代表当前循环的值。
模板代码示例:
{dede:list pagesize='10'}
<li>
<!-- 在 autoindex 基础上加1 -->
[field autoindex runphp='yes']@me = @me + 1;[/field].
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:list}
代码解析:
{dede:list}: 开始列表循环。
[field autoindex runphp='yes']...[/field]: 这是一个强大的用法。
autoindex: 获取当前循环的索引值(从0开始)。
runphp='yes': 启用PHP运行模式。
@me = @me + 1;: 在PHP代码中,@me 代表 autoindex 的当前值,这行代码的意思是,将 @me 的值加1,然后再赋值给 @me,最终输出的就是 autoindex + 1 的结果。
- 在HTML中用作序号和标题之间的分隔符。
方案B:使用 @me 变量(更简洁的写法)
这是方案A的简化版,同样非常常用和清晰。
模板代码示例:
{dede:list pagesize='10'}
<li>
<!-- 使用 @me 变量进行计算 -->
[field:global name=autoindex runphp='yes']@me = @me + 1;[/field].
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
代码解析:
[field:global name=autoindex runphp='yes']...[/field]: 这里我们直接调用全局变量 autoindex。
@me = @me + 1;: 逻辑和方案A完全一样,获取 autoindex 的值(@me),加1后重新赋值给 @me。
两种方案A和B的区别:
[field autoindex] 和 [field:global name=autoindex] 在大多数情况下效果相同。global 更明确地表示它是一个全局循环变量,而 field 通常指当前文章的字段,但在这里,autoindex 是循环变量,所以两种写法都可以,选择你觉得更清晰的一种即可。
总结与对比
特性
修改核心文件
使用模板标签
安全性
低,修改核心文件,有网站崩溃风险。
高,不修改任何程序文件,只修改模板。
灵活性
低,一旦修改,全站所有 autoindex 都生效,无法单独控制。
高,可以在任意一个列表循环中独立设置,想从1开始就从1开始,想从0开始就保留默认。
可维护性
差,织梦升级后修改会丢失,需要重新修改。
好,模板修改独立,升级不受影响。
操作难度
简单,只需改一个文件。
稍微复杂一点,需要理解织梦的模板标签语法。
推荐度
不推荐,仅适用于你确定全站所有序号都需要从1开始,且不打算升级网站的情况。
强烈推荐,这是标准的、正确的织梦二次开发方式。
为了网站的安全和未来的可维护性,请务必选择方法二,在需要显示序号的模板文件中,使用 [field:global name=autoindex runphp='yes']@me = @me + 1;[/field] 或 [field autoindex runphp='yes']@me = @me + 1;[/field] 是最佳实践。
这个方法适用于 dede:list 和 dede:arclist 标签中。autoindex 是循环的内部变量,从0开始,而 @me 代表当前循环的值。
模板代码示例:
{dede:list pagesize='10'}
<li>
<!-- 在 autoindex 基础上加1 -->
[field autoindex runphp='yes']@me = @me + 1;[/field].
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:list}
代码解析:
{dede:list}: 开始列表循环。[field autoindex runphp='yes']...[/field]: 这是一个强大的用法。autoindex: 获取当前循环的索引值(从0开始)。runphp='yes': 启用PHP运行模式。@me = @me + 1;: 在PHP代码中,@me代表autoindex的当前值,这行代码的意思是,将@me的值加1,然后再赋值给@me,最终输出的就是autoindex + 1的结果。
- 在HTML中用作序号和标题之间的分隔符。
方案B:使用 @me 变量(更简洁的写法)
这是方案A的简化版,同样非常常用和清晰。
模板代码示例:
{dede:list pagesize='10'}
<li>
<!-- 使用 @me 变量进行计算 -->
[field:global name=autoindex runphp='yes']@me = @me + 1;[/field].
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
代码解析:
[field:global name=autoindex runphp='yes']...[/field]: 这里我们直接调用全局变量autoindex。@me = @me + 1;: 逻辑和方案A完全一样,获取autoindex的值(@me),加1后重新赋值给@me。
两种方案A和B的区别:
[field autoindex] 和 [field:global name=autoindex] 在大多数情况下效果相同。global 更明确地表示它是一个全局循环变量,而 field 通常指当前文章的字段,但在这里,autoindex 是循环变量,所以两种写法都可以,选择你觉得更清晰的一种即可。
总结与对比
| 特性 | 修改核心文件 | 使用模板标签 |
|---|---|---|
| 安全性 | 低,修改核心文件,有网站崩溃风险。 | 高,不修改任何程序文件,只修改模板。 |
| 灵活性 | 低,一旦修改,全站所有 autoindex 都生效,无法单独控制。 |
高,可以在任意一个列表循环中独立设置,想从1开始就从1开始,想从0开始就保留默认。 |
| 可维护性 | 差,织梦升级后修改会丢失,需要重新修改。 | 好,模板修改独立,升级不受影响。 |
| 操作难度 | 简单,只需改一个文件。 | 稍微复杂一点,需要理解织梦的模板标签语法。 |
| 推荐度 | 不推荐,仅适用于你确定全站所有序号都需要从1开始,且不打算升级网站的情况。 | 强烈推荐,这是标准的、正确的织梦二次开发方式。 |
为了网站的安全和未来的可维护性,请务必选择方法二,在需要显示序号的模板文件中,使用 [field:global name=autoindex runphp='yes']@me = @me + 1;[/field] 或 [field autoindex runphp='yes']@me = @me + 1;[/field] 是最佳实践。
