dede列表页autoindex如何实现自增序号?

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

{dede:autoindex} 是什么?

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

dede 列表页autoindex
(图片来源网络,侵删)
  • 作用场景:主要用于列表页模板(通常是 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}

输出效果:

dede 列表页autoindex
(图片来源网络,侵删)

假设列表有 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='起始值'}

dede 列表页autoindex
(图片来源网络,侵删)

示例: 想让序号从 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}

代码解释:

  1. {dede:php}...{/dede:php}:允许在模板中直接执行 PHP 代码。
  2. $GLOBALS['autoindex']:这是 DedeCMS 内部存储当前自动序号的 PHP 全局变量。
  3. sprintf("%02d", $number):这是一个强大的 PHP 函数,%02d 的意思是:
    • %d:表示这是一个十进制整数。
    • 2:表示总共占 2 个字符宽度。
    • 0:表示如果宽度不足,用 0 来填充,而不是默认的空格。
  4. [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> 文章标题二 ...


注意事项

  1. 作用域{dede:autoindex} {dede:list}{dede:arclist} 等循环标签内部有效,在循环外部使用它将不会得到任何结果或显示 0。
  2. 分页问题autoindex 的计数是基于当前页面的数据条数,而不是从所有数据的第一条开始,如果你需要实现全站不重复的序号(第一页 1-10,第二页 11-20...),这个标签是无法直接做到的,需要更复杂的逻辑,比如通过数据库获取总记录数然后计算。
  3. 模板引擎:确保你的 DedeCMS 版本支持这种标签写法,绝大多数标准版本的 DedeCMS 都支持。
  4. 推荐写法:虽然 {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} 的用法,特别是 startretype 属性,以及结合 PHP 代码进行自定义格式化的技巧,可以让你在制作列表页时更加得心应手。

-- 展开阅读全文 --
头像
dede global.color变量如何获取与使用?
« 上一篇 2025-12-17
织梦orderby click如何实现点击量排序?
下一篇 » 2025-12-17

相关文章

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

目录[+]