dede循环标签key如何正确使用?

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

什么是 key 属性?

keydede 标签的一个内置属性,它的作用是为循环中的每一个子项自动生成一个唯一的、从指定数字开始的序号(索引)

dede 循环标签加key
(图片来源网络,侵删)

当你使用 key 后,你就可以在循环体内通过 [field:key/] 这个变量来获取当前项是第几个。


key 属性的语法

在循环标签中,直接添加 key='起始值' 即可。

{dede:标签名 key='起始值'}
    <!-- 循环内容 -->
    [field:key/]
{/dede:标签名}
  • key: 属性名,固定为 key
  • '起始值': 你希望序号开始的数字,如果不指定,默认从 0 开始。

key 属性的作用和使用场景

key 属性在网页开发中非常实用,主要用于以下几种情况:

自动添加序号

这是最直接的功能,比如在文章列表前显示编号。

dede 循环标签加key
(图片来源网络,侵删)

示例: 假设你想让文章列表从 1 开始编号。

<ul>
    {dede:arclist titlelen='30' row='5' key='1'}
        <li>
            [field:key]. [field:title/]
        </li>
    {/dede:arclist}
</ul>

输出结果:

<ul>
    <li>1. 这是第一篇文章的标题</li>
    <li>2. 这是第二篇文章的标题</li>
    <li>3. 这是第三篇文章的标题</li>
    <li>4. 这是第四篇文章的标题</li>
    <li>5. 这是第五篇文章的标题</li>
</ul>

实现隔行变色(Zebra Stripes)

这是 key 最经典的应用之一,通过判断 key 的奇偶性来给不同的行添加不同的CSS类,从而实现视觉上的区分。

示例:

dede 循环标签加key
(图片来源网络,侵删)
<table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <th>序号</th>
        <th>标题</th>
        <th>发布时间</th>
    </tr>
    {dede:arclist titlelen='30' row='10'}
        <tr class="[field:global name=autoindex runphp="yes"]
if(@me % 2 == 0){@me='even';}else{@me='odd';}"]">
            <td>[field:key/]</td>
            <td>[field:title/]</td>
            <td>[field:pubdate function="MyDate('Y-m-d',@me)"/]</td>
        </tr>
    {/dede:arclist}
</table>

代码解析:

  • [field:global name=autoindex runphp="yes"]: autoindex 是另一个与 key 类似的内置变量,它表示从1开始的序号,我们在这里用它来进行取模运算。
  • if(@me % 2 == 0){@me='even';}else{@me='odd';}: 这是PHP代码,判断 autoindex 是否能被2整除,如果能,则设置 @me (即当前值) 为 'even',否则为 'odd'
  • class="[field:global ...]": 将计算出的 'even''odd' 作为 tr 标签的 class 值。

CSS样式:

/* 偶数行样式 */
table tr.even {
    background-color: #f9f9f9;
}
/* 奇数行样式 (默认就是白色,可以不写) */
table tr.odd {
    background-color: #ffffff;
}

控制循环的特定行为

你可以通过 key 的值来对某一项或某几项进行特殊处理,比如只在第一项或最后一项添加某个元素。

示例: 只在第一篇文章前面加上“热门推荐”的标签。

{dede:arclist titlelen='30' row='5' key='1'}
    [field:key runphp="yes"]
        if(@me == 1) {
            @me = '<span class="hot-tag">热门推荐</span>';
        } else {
            @me = '';
        }
    [/field:key]
    <div>
        [field:title/]
    </div>
{/dede:arclist}

代码解析:

  • [field:key runphp="yes"]: 我们对 key 变量使用 runphp
  • if(@me == 1): 判断当前 key 值是否为1。
  • 如果是,则 @me 被赋值为一个HTML标签字符串。
  • 如果不是,则 @me 被赋值为空字符串。

keyautoindex 的区别

这是很多新手容易混淆的地方,虽然它们都用来表示序号,但有一些关键区别:

特性 [field:key/] [field:global name='autoindex'/]
定义方式 通过标签属性 key='起始值' 定义 内置全局变量,无需定义
起始值 可自定义,默认为 0 固定从 1 开始
作用域 只在当前 {dede:...} 标签内有效 只在当前 {dede:...} 标签内有效
典型用法 [field:key/] [field:global name='autoindex'/]
PHP调用 [field:key runphp='yes'] [field:global name='autoindex' runphp='yes']

简单总结:

  • 如果你需要从 0 开始计数,或者需要一个可自定义起始值的序号,使用 key
  • 如果你只需要一个从1开始的简单序号,使用 autoindex 更为方便和符合常规认知。

完整示例:{dede:arclist} 使用 key

下面是一个完整的、结合了 keyautoindex 的列表实例。

模板代码:

<h2>文章列表 (使用 key 从0开始)</h2>
<ul>
    {dede:arclist titlelen='40' row='5' key='0'}
        <li>
            <strong>Key值:</strong> [field:key/] | 
            <strong>Autoindex值:</strong> [field:global name='autoindex'/] | 
            <a href="[field:arcurl/]">[field:title/]</a>
        </li>
    {/dede:arclist}
</ul>
<hr>
<h2>文章列表 (使用 key 从1开始)</h2>
<ul>
    {dede:arclist titlelen='40' row='5' key='1'}
        <li>
            <strong>Key值:</strong> [field:key/] | 
            <strong>Autoindex值:</strong> [field:global name='autoindex'/] | 
            <a href="[field:arcurl/]">[field:title/]</a>
        </li>
    {/dede:arclist}
</ul>

可能的输出结果:

<h2>文章列表 (使用 key 从0开始)</h2>
<ul>
    <li><strong>Key值:</strong> 0 | <strong>Autoindex值:</strong> 1 | <a href="/a/1.html">这是第一篇文章的标题</a></li>
    <li><strong>Key值:</strong> 1 | <strong>Autoindex值:</strong> 2 | <a href="/a/2.html">这是第二篇文章的标题</a></li>
    <li><strong>Key值:</strong> 2 | <strong>Autoindex值:</strong> 3 | <a href="/a/3.html">这是第三篇文章的标题</a></li>
    <li><strong>Key值:</strong> 3 | <strong>Autoindex值:</strong> 4 | <a href="/a/4.html">这是第四篇文章的标题</a></li>
    <li><strong>Key值:</strong> 4 | <strong>Autoindex值:</strong> 5 | <a href="/a/5.html">这是第五篇文章的标题</a></li>
</ul>
<hr>
<h2>文章列表 (使用 key 从1开始)</h2>
<ul>
    <li><strong>Key值:</strong> 1 | <strong>Autoindex值:</strong> 1 | <a href="/a/1.html">这是第一篇文章的标题</a></li>
    <li><strong>Key值:</strong> 2 | <strong>Autoindex值:</strong> 2 | <a href="/a/2.html">这是第二篇文章的标题</a></li>
    <li><strong>Key值:</strong> 3 | <strong>Autoindex值:</strong> 3 | <a href="/a/3.html">这是第三篇文章的标题</a></li>
    <li><strong>Key值:</strong> 4 | <strong>Autoindex值:</strong> 4 | <a href="/a/4.html">这是第四篇文章的标题</a></li>
    <li><strong>Key值:</strong> 5 | <strong>Autoindex值:</strong> 5 | <a href="/a/5.html">这是第五篇文章的标题</a></li>
</ul>

从上面的例子可以清晰地看到 keyautoindex 的区别。

注意事项

  1. 嵌套循环:如果存在嵌套的循环标签(比如在 {dede:channelartlist} 里使用 {dede:arclist}),内外层的 keyautoindex 是相互独立的,不会互相干扰。
  2. 性能影响keyautoindex 是DedeCMS模板引擎在解析时自动计算的,对性能影响极小,可以放心使用。
  3. runphp 的强大:当 keyautoindexrunphp 结合时,可以实现非常复杂的逻辑判断,是DedeCMS模板开发的高级技巧。

希望这个详细的解释能帮助你完全理解并熟练使用DedeCMS中的 key 属性!

-- 展开阅读全文 --
头像
织梦channelid如何实现精准内容分发?
« 上一篇 02-15
织梦html5网站模板如何适配多端?
下一篇 » 02-15

相关文章

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

目录[+]