dede标签循环如何正确使用与嵌套?

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

在 DedeCMS 中,循环主要通过 {dede:arclist} (文章列表) 和 {dede:loop} (通用循环) 这两个标签来实现,它们都遵循一个基本的结构:{dede:标签名 属性='值'}...循环内容...{/dede:标签名}

dede标签里面的循环
(图片来源网络,侵删)

核心循环标签:{dede:arclist}{dede:loop}

{dede:arclist} - 专门用于文章/文档列表循环

这是最常用、最强大的循环标签,专门用于调用文章、图集、软件等文档内容。

基本语法:

{dede:arclist flag='h' typeid='2' row='10' titlelen='30'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:arclist}

结构解析:

  • {dede:arclist ...}: 循环的开始。
    • flag='h': 属性,表示调用推荐(头条)文章。
    • typeid='2': 属性,表示只调用 ID 为 2 的栏目及其子栏目的文章。
    • row='10': 属性,表示循环 10 次,即调用 10 篇文章。
    • titlelen='30': 属性,表示标题最多显示 30 个字符。
  • ...循环内容...: 每次循环时,都会执行一次这里的代码。
    • [field:arcurl/]: 字段标签,代表当前文章的链接地址。
    • `[field:title/]字段标签**,代表当前文章的标题。
    • [field:pubdate .../]: 字段标签,代表当前文章的发布日期。function="MyDate('Y-m-d',@me)" 是一个自定义函数,用来格式化日期。
  • {/dede:arclist}: 循环的结束。

常用属性:

dede标签里面的循环
(图片来源网络,侵删)
属性名 说明 示例
typeid 调用指定栏目ID的文章,多个ID用逗号隔开。 typeid='1,3,5'
row 循环输出的记录数,即调用多少篇文章。 row='8'
infolen 内容简介长度,字符数。 infolen='100'
orderby 排序方式。id(默认), pubdate(发布日期), hot(点击量), sortrank(权重)。 orderby='hot'
keyword 关键词,调用含有此关键词的文章。 keyword='织梦'
flag 特殊属性。h(头条), c(推荐), p(图片), f(幻灯),可组合,如 hc flag='h'
channelid 模型ID。1为文章,2为图集,依此类推。 channelid='2'

{dede:loop} - 通用数据循环

{dede:loop} 是一个更通用的循环标签,它可以循环任何数据表里的数据,不局限于文章,当你需要调用自定义数据表的内容时,这个标签非常有用。

基本语法:

{dede:loop table='dede_archives' sort='id' row='10' if=''}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:loop}

结构解析:

  • {dede:loop table='...' ...}:
    • table='dede_archives': 必须属性,指定要循环的数据表名。dede_archives 是文章主表。
    • sort='id': 排序字段,默认为 id 降序。
    • row='10': 循环输出的记录数。
    • if='': 查询条件,类似 SQL 的 WHERE 子句。if='arcrank > -1' 表示只调用已审核的文章。

循环体内部的核心:字段标签 [field:xxx/]

循环的意义在于处理每一项的数据。[field:xxx/] 就是用来获取当前循环项中具体字值的标签。

dede标签里面的循环
(图片来源网络,侵删)

{dede:arclist} 常用字段标签:

字段标签 说明 示例
[field:title/** [field:title/]
[field:arcurl/** 文章链接 <a href="[field:arcurl/]">...</a>
[field:pubdate/** 发布时间戳(Unix时间) [field:pubdate function="MyDate('Y-m-d',@me)"/]
[field:description/** 中自动截取) [field:description/]
[field:litpic/** 文章缩略图 <img src="[field:litpic/]" alt="[field:title/]">
[field:click/** 文章点击量 点击:[field:click/]次
[field:writer/** 文章作者 [field:writer/]
[field:source/** 文章来源 [field:source/]
[field:shorttitle/** [field:shorttitle/]
[field:keywords/** 文章关键词 [field:keywords/]

重要技巧:使用 function 进行数据处理

当字段值不满足需求时,可以使用 function 属性调用PHP函数来处理。

<!-- 1. 格式化日期 -->
[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]
<!-- 2. 截取字符串,并添加省略号 -->
[field:title function="cn_substr(@me, 20)"/]
<!-- 3. 去掉HTML标签,只显示文本 -->
[field:description function="htmlspecialchars(cn_substr(Html2Text(@me), 100))"/]
<!-- 4. 判断并输出 -->
[field:click runphp='yes']
    if(@me > 1000) @me = "<span class='hot'>".@me."</span>";
    else @me = @me;
[/field:click]

高级循环技巧

循环中的条件判断 (if)

在循环内部,你可以使用 {dede:if} 标签来根据字段值判断是否输出某些内容。

示例:如果文章有缩略图才显示图片

{dede:arclist row='5'}
    <li>
        {dede:if field='litpic' neq ''}
            <img src="[field:litpic/]" alt="[field:title/]" />
        {/dede:if}
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}
  • neq 表示 "不等于" (not equal)。eq 表示 "等于" (equal)。

嵌套循环

一个循环内部可以包含另一个循环,常用于调用子栏目下的文章。

示例:先调用所有顶级栏目,再循环每个栏目下的文章

{dede:channel type='top' row='8'}
    <h2><a href="[field:typelink/]">[field:typename/]</a></h2>
    <ul>
        {dede:arclist typeid='[field:id]' row='5'}
            <li><a href="[field:arcurl/]">[field:title/]</a></li>
        {/dede:arclist}
    </ul>
{/dede:channel}
  • typeid='[field:id]': 这里巧妙地将外层循环的栏目ID [field:id] 传递给了内层的 {dede:arclist},实现了“调用当前栏目下的文章”。

循环中的序号 ([field:global.autoindex/]) 和隔行变色

[field:global.autoindex/] 是一个全局变量,用于获取当前循环的次数(从1开始)。

示例:实现隔行变色

{dede:arclist row='10'}
    <li class="[field:global name=autoindex runphp='yes']
        if(@me % 2 == 0) @me = 'even';
        else @me = 'odd';
        [/field:global]">
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}
  • CSS 中定义 .odd { background-color: #f1f1f1; }.even { background-color: #fff; } 即可实现隔行变色效果。

用途 核心属性 适用场景
{dede:arclist} 文章/文档列表循环 typeid, row, orderby, flag 首页、列表页、相关文章、热门文章等所有文章列表。
{dede:loop} 通用数据表循环 table, row, sort, if 调用自定义数据表、调用单页文档内容、调用特定模型等。

学习建议:

  1. {dede:arclist} 开始:这是最常用的,先掌握它的基本属性和常用字段。
  2. 理解 [field:xxx/]:学会查看 DedeCMS 的标签说明文档,了解有哪些字段可以用。
  3. 掌握 function:这是实现复杂功能的关键,多练习用 function 格式化日期和字符串。
  4. 尝试嵌套和判断:当你需要制作更复杂的布局(如带子栏目的首页)时,这些技巧就派上用场了。

通过以上学习,你就可以自如地使用 DedeCMS 的标签循环功能来构建任何你想要的页面布局了。

-- 展开阅读全文 --
头像
织梦如何实现金币下载?
« 上一篇 今天
织梦搜索结果页伪静态如何实现?
下一篇 » 今天

相关文章

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

目录[+]