织梦循环自定义递增如何实现?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 织梦建站 正文

使用 php 标签(最灵活、最常用)

这种方法的核心思想是:在织梦的循环标签(如 {dede:arclist}{dede:loop})内部,使用 {dede:php} 标签来执行原生的 PHP 代码,从而实现复杂的逻辑控制,比如自定义递增变量。

织梦循环自定义递增
(图片来源网络,侵删)

适用场景

  • 需要在循环内部执行复杂的 PHP 逻辑。
  • 需要定义多个变量并进行交互。
  • 对代码的灵活性和可读性要求较高。

代码示例

假设我们要在一个列表中,为每个列表项添加一个序号,并且这个序号从 100 开始,每次递增 10

<ul>
  {dede:arclist row='5' titlelen='30'}
    {dede:php}
      // 定义并初始化一个变量 $myCounter
      // 注意:这个变量只在当前 {dede:php} 标签的作用域内有效
      // 为了让它能在循环中保持并递增,我们需要将其声明为 static
      // 第一次执行时,static $myCounter = 100; 会被执行
      // 后续循环时,$myCounter 会保留上一次的值
      static $myCounter = 100;
      // 使用这个变量
      echo "<li>自定义序号: " . $myCounter . " - " . $fields['title'] . "</li>";
      // 递增变量
      $myCounter += 10;
    {/dede:php}
  {/dede:arclist}
</ul>

代码解析

织梦循环自定义递增
(图片来源网络,侵删)
  1. {dede:arclist row='5' titlelen='30'}: 这是一个标准的织梦文章列表标签,我们获取5篇文章。
  2. {dede:php} ... {/dede:php}: 这个标签块允许我们直接编写 PHP 代码。
  3. static $myCounter = 100;: 这是实现递增的关键。
    • static 关键字确保了 $myCounter 变量在每次循环时不会被重新初始化,它只在第一次循环前被赋值 100
    • 在第二次、第三次...循环时,$myCounter 会保留上一次循环结束时的值(110, 120, ...)。
  4. echo ...: 这里我们输出了自定义的序号和文章标题,将其组合成一个 <li>
  5. $myCounter += 10;: 每次循环结束后,将 $myCounter 的值增加 10

输出结果

<ul>
  <li>自定义序号: 100 - 文章标题1</li>
  <li>自定义序号: 110 - 文章标题2</li>
  <li>自定义序号: 120 - 文章标题3</li>
  <li>自定义序号: 130 - 文章标题4</li>
  <li>自定义序号: 140 - 文章标题5</li>
</ul>

使用织梦自带的自定义属性(更简洁、更“织梦”)

织梦的很多循环标签(如 {dede:arclist}, {dede:channelartlist}, {dede:loop})都支持一个 lineid 属性,可以用来生成一个从指定数字开始的递增ID,这种方法不需要写PHP代码,更简洁。

适用场景

  • 只需要一个简单的、从1开始的递增ID。
  • 需要生成一个有规律的 idclass 名称,item_1, item_2

代码示例

织梦循环自定义递增
(图片来源网络,侵删)
<ul>
  {dede:arclist row='5' titlelen='30' lineid='list-item-'}
    <li id="{lineid}">文章标题: [field:title/]</li>
  {/dede:arclist}
</ul>

代码解析

  1. lineid='list-item-': 在 {dede:arclist} 标签中添加这个属性。
    • 织梦会自动为循环中的每一项生成一个 lineid 变量。
    • 对于第一项,{lineid} 的值是 list-item-1
    • 对于第二项,{lineid} 的值是 list-item-2
    • 以此类推。

输出结果

<ul>
  <li id="list-item-1">文章标题: 文章标题1</li>
  <li id="list-item-2">文章标题: 文章标题2</li>
  <li id="list-item-3">文章标题: 文章标题3</li>
  <li id="list-item-4">文章标题: 文章标题4</li>
  <li id="list-item-5">文章标题: 文章标题5</li>
</ul>

lineid 的高级用法(自定义起始值和步长)

如果你使用的是织梦的 loop 标签,lineid 还可以指定起始值和步长。

{dede:loop table='dede_archives' sort='id' row='5' lineid='myid|100|5'}
  <li id="{lineid}">ID: [field:id/]</li>
{/dede:loop}
  • lineid='myid|100|5' 的格式是 变量名|起始值|步长
  • 这将生成 myid-100, myid-105, myid-110... 这样的ID。

注意{dede:arclist} 标签的 lineid 通常只支持从1开始,不支持自定义起始值和步长,如果需要更复杂的递增,方法一(PHP标签)是更可靠的选择


总结与对比

特性 方法一 ({dede:php}) 方法二 (lineid 属性)
灵活性 极高,可以执行任何PHP代码,逻辑不受限制。 较低,仅限于生成递增的ID。
自定义性 极高,可以定义任意变量,控制递增的起始值、步长,甚至进行条件判断。 较低,通常只能从1开始递增(loop标签除外)。
简洁性 较低,需要编写PHP代码,对不熟悉PHP的开发者不友好。 极高,只需在标签中添加一个属性即可。
适用标签 几乎所有循环标签(arclist, channelartlist, loop等)。 主要用于 arclist, channelartlist, loop 等列表标签。
推荐场景 需要复杂的、非标准的递增逻辑,如从100开始,每次+10,或者根据条件改变递增值。 只需要一个简单的、标准的序号(1, 2, 3...)来生成ID或class。

最终建议

  • 如果你的需求只是给列表项加一个简单的序号,优先使用方法二(lineid,因为它更简洁、更符合织梦的设计哲学。
  • 如果你的需求是“自定义递增”,比如起始值不是1,步长不是1,或者需要在递增过程中做其他判断,请务必使用方法一({dede:php},它能完美满足你的所有要求。
-- 展开阅读全文 --
头像
dede个人任务发布如何操作?
« 上一篇 04-19
num在C语言中到底是什么?
下一篇 » 04-19

相关文章

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