dede td标签如何实现循环输出?

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

在 DedeCMS 的模板引擎中,循环是通过底层模板({dede:loop})和字段列表({dede:field})标签来实现的,对于表格中的 <td> 循环,最常见的需求是“将一篇文章的多个字段(如标签、关键词等)横向排列在一行”。

dede td都循环
(图片来源网络,侵删)

下面我将分几种常见场景来讲解,从简单到复杂。


循环文章的自定义字段(最常见)

假设你的文章模型增加了一个自定义字段 tags,用于存储多个标签,格式为 "标签1,标签2,标签3",你想在一个表格行 <tr> 中,将这些标签分别用 <td> 显示出来。

模板代码示例:

{dede:arclist row='5' titlelen='30'}
  <tr>
    <!-- 循环输出当前文章的标签 -->
    {dede:loop}
      <td>
        [field:tags function='str_replace(",", "<br />", @me)'/]
      </td>
    {/dede:loop}
    <!-- 或者,如果你有多个独立的自定义字段需要循环 -->
    <!-- {dede:loop}
      <td>
        [field:自定义字段名/]
      </td>
    {/dede:loop} -->
  </tr>
{/dede:arclist}

代码解析:

dede td都循环
(图片来源网络,侵删)
  1. {dede:arclist row='5'}: 这是一个标准的文章列表标签,row='5' 表示获取5篇文章,它会创建一个5行的表格。
  2. <tr>: 表格的行,每一行代表一篇文章。
  3. {dede:loop}: 这是核心! {dede:loop} 标签会在其父标签(这里是 {dede:arclist})的每一次循环中,再进行一次循环,它默认循环次数由父标签的 item 属性决定(如果没写,则循环一次),它的作用域是当前正在处理的“那一篇文章”。
  4. <td>: 表格的列。{dede:loop} 每循环一次,就会输出一个 <td>
  5. [field:tags function='str_replace(",", "<br />", @me)'/]: 这是循环体内部的内容。
    • [field:tags/] 用于获取当前文章的 tags 字段值。
    • function='...' 是一个函数处理,这里我们用 str_replace 函数将逗号 替换成换行 <br />,这样在单个 <td> 内,多个标签就能垂直换行显示,看起来更清晰。

如何使用:

  1. 在后台为你的文章模型添加一个“文本”类型的自定义字段,tags
  2. 发布文章时,在 tags 字段中输入多个值,用英文逗号隔开,技术,教程,DedeCMS
  3. 将上述代码放入你的列表模板文件(通常是 /templets/default/list_article.htm)中,并确保它被 <table> 标签包裹。

循环输出固定的列数(每行3个)

这个需求也很常见,比如你想做一个产品展示,每行显示3个产品,而不是每个产品占一整行,这时需要用到 {dede:loop}col 属性。

模板代码示例:

假设你每行想显示3个 <td>

dede td都循环
(图片来源网络,侵删)
<table border="1">
  <!-- 使用 {dede:loop} 来控制列的循环 -->
  {dede:loop table='dede_archives' sort='id' row='9' col='3'}
    <tr>
      <!-- 循环输出3个td -->
      {dede:loop}
        <td>
          [field:title/]
        </td>
      {/dede:loop}
    </tr>
  {/dede:loop}
</table>

代码解析:

  1. {dede:loop table='...' row='...' col='...'}: 这里的 {dede:loop} 是一个独立的标签,不依赖 {dede:arclist}
    • table='dede_archives': 指定要查询的数据表(这里是文章主表)。
    • row='9': 总共要获取的数据记录数(9条)。
    • col='3': 这是关键! 指定每行显示多少列(3个 <td>)。
  2. <tr>: 这个 <tr> 会被 {dede:loop} 自动控制,当循环次数达到 col 设定的值(这里是3)时,就会结束当前行,并自动生成一个新的 <tr>
  3. {dede:loop} (内层): 这个内层的循环体,就是每行中每个单元格的具体内容,它会循环 col 次数,也就是3次。

输出结果:

<table border="1">
  <tr>
    <td>文章标题 1</td>
    <td>文章标题 2</td>
    <td>文章标题 3</td>
  </tr>
  <tr>
    <td>文章标题 4</td>
    <td>文章标题 5</td>
    <td>文章标题 6</td>
  </tr>
  <tr>
    <td>文章标题 7</td>
    <td>文章标题 8</td>
    <td>文章标题 9</td>
  </tr>
</table>

{dede:arclist} 内部循环固定次数(不推荐,但可行)

有时候你可能想在每一篇文章的行里,都循环输出3个固定的 <td>,虽然场景二更合适,但如果你坚持要这样做,可以这样写。

模板代码示例:

{dede:arclist row='3'}
  <tr>
    <!-- 使用 {dede:loop} 的 col 属性来循环固定次数 -->
    {dede:loop row='3'}
      <td>
        这是第[field.global.autoindex/]列
      </td>
    {/dede:loop}
  </tr>
{/dede:arclist}

代码解析:

  1. {dede:arclist} 循环3次,生成3个 <tr>
  2. 在每个 <tr> 内部,{dede:loop row='3'} 会循环3次,生成3个 <td>
  3. [field.global.autoindex/] 是一个全局变量,表示当前循环的序号,它会显示 1, 2, 3。

输出结果:

<table>
  <tr>
    <td>这是第1列</td>
    <td>这是第2列</td>
    <td>这是第3列</td>
  </tr>
  <tr>
    <td>这是第1列</td>
    <td>这是第2列</td>
    <td>这是第3列</td>
  </tr>
  <tr>
    <td>这是第1列</td>
    <td>这是第2列</td>
    <td>这是第3列</td>
  </tr>
</table>

总结与最佳实践

需求场景 推荐标签 关键属性 说明
循环一篇文章的多个字段 {dede:arclist} + {dede:loop} 无特殊属性 {dede:loop}{dede:arclist} 的每次循环中执行,用于处理单篇文章的多个数据项。
循环固定列数,展示多篇文章 {dede:loop} table, row, col 最推荐用于表格布局,直接控制输出多少行多少列,代码简洁,逻辑清晰。
循环固定次数,与文章数据无关 {dede:arclist} + {dede:loop} row 适用于生成重复的、无数据关联的单元格,但不如场景二灵活。

核心要点:

  • {dede:loop} 是实现 <td> 循环的核心。
  • 嵌套循环:当 {dede:loop} 放在 {dede:arclist}{dede:sql} 等标签内部时,它循环的是当前记录的子项
  • 独立循环:当 {dede:loop} 独立使用时,通过 table, row, col 属性,可以直接控制整个表格的行和列结构,这是实现“每行N个”布局的最佳方式。

根据你的具体需求选择合适的方法,通常情况下,场景二是解决“表格多列循环”问题的标准答案。

-- 展开阅读全文 --
头像
管理员权限丢了怎么办?
« 上一篇 昨天
dede栏目列表选项有哪些具体配置?
下一篇 » 昨天

相关文章

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

目录[+]