dede arclist如何获取循环中的当前次数?

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

使用 linebottom 属性 (最简单)

这是最直接、最简单的方法,适用于只需要在列表的最后一个项目添加特殊样式(比如去掉最后一个元素的分割线或边框)的场景。

dede arclist 获取循环数
(图片来源网络,侵删)

标签说明

{dede:arclist} 标签有一个 linebottom 属性,它的作用是在循环的最后一项输出指定的内容

语法

{dede:arclist titlelen='30' row='10' linebottom='</li><li>'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}

工作原理:

  1. linebottom='</li><li>' 的意思是:在循环输出所有条目之后,再额外输出一次 </li><li>
  2. 这会导致最终的 HTML 结构中,在最后一个 </li> 后面又多了一个 <li>
  3. 我们可以利用这个多余的 <li> 来判断循环是否结束,或者通过 CSS 的 last-child 选择器来巧妙地处理样式。

实际应用示例:去掉最后一个列表项的边框

假设你的列表项都有右边框,但希望最后一个没有。

HTML 模板:

dede arclist 获取循环数
(图片来源网络,侵删)
<ul class="news-list">
    {dede:arclist titlelen='30' row='10' linebottom='</li><li>'}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
        </li>
    {/dede:arclist}
</ul>

CSS 样式:

.news-list li {
    border-right: 1px solid #ccc;
    /* 其他样式... */
}
/* 利用 :last-child 选择器,隐藏最后一个元素的右边框 */
.news-list li:last-child {
    border-right: none;
}

注意: 这种方法会生成一个多余的 <li> 标签,虽然 CSS 可以处理,但从代码结构上讲不够完美,它最适合的场景是当你需要在循环结束后添加一个额外的、独立的元素时。


使用 PHP 代码 (最灵活、最推荐)

当你需要在循环内部根据当前是第几次循环来执行不同操作时(每3个元素为一行,或者为奇数/偶数项添加不同样式),使用 PHP 代码是最佳选择。

核心思路

在 DedeCMS 的模板中,你可以使用 PHP 代码块,我们可以在循环开始前初始化一个计数器变量 i,然后在每次循环时让 i 自增,最后通过判断 i 的值来执行不同的逻辑。

dede arclist 获取循环数
(图片来源网络,侵删)

实际应用示例:实现“每3个列表项为一行”

这是一个非常常见的需求,比如制作图片墙或商品列表。

HTML 模板:

<div class="row-container">
    {dede:arclist titlelen='30' row='9'}
        <!-- PHP 代码块开始 -->
        [field:global name=autoindex runphp="yes"]
            $i = @me;
            if($i % 3 == 1) {
                @me = "<div class='row'>";
            } else {
                @me = "";
            }
        [/field:global]
        <div class="col-md-4">
            <a href="[field:arcurl/]">[field:title/]</a>
        </div>
        <!-- PHP 代码块结束 -->
        [field:global name=autoindex runphp="yes"]
            $i = @me;
            if($i % 3 == 0 || $i == 9) { // 9是总行数,也可以用[field:global name=itemindex/]来判断是否是最后一个
                @me = "</div>";
            } else {
                @me = "";
            }
        [/field:global]
    {/dede:arclist}
</div>

代码解析:

  1. [field:global name=autoindex runphp="yes"]:

    • autoindex{dede:arclist} 标签自带的一个全局变量,代表当前循环的序号(从1开始)。
    • runphp="yes" 允许我们对这个变量执行 PHP 代码。
    • @merunphp 中代表当前标签的值,也就是 autoindex 的值。
  2. 开头的判断 (if($i % 3 == 1)):

    • $i % 3 是取模运算,计算 i 除以3的余数。
    • 当余数为1时(即第1、4、7...个元素),我们就输出一个 <div class='row'> 开始一个新行。
  3. 结尾的判断 (if($i % 3 == 0 || $i == 9)):

    • 当余数为0时(即第3、6、9...个元素),我们就输出 </div> 结束当前行。
    • || $i == 9 是为了处理最后一行可能不足3个元素的情况,确保在列表结束时关闭最后一个 <div class='row'>

CSS 样式:

.row-container {
    /* 清除浮动 */
    overflow: hidden; 
}
.row {
    /* 清除浮动 */
    clear: both; 
    /* 可以添加行间距 */
    margin-bottom: 20px; 
}
.col-md-4 {
    float: left;
    width: 33.33333333%;
    /* 其他样式... */
}

总结与对比

特性 方法一 (linebottom) 方法二 (PHP autoindex)
实现方式 使用标签自带属性 在模板中嵌入 PHP 代码
灵活性 ,只能判断循环的“最后一项”。 非常高,可以获取任意循环次数,进行各种逻辑判断。
适用场景 只需为最后一个元素添加特殊样式(如去掉边框)。 需要根据循环次数进行复杂布局,如每N个一行、奇偶项样式不同等。
代码整洁度 可能会生成多余的HTML标签。 代码结构清晰,生成的HTML也符合预期。
推荐度 简单场景可用。 强烈推荐,功能强大且是标准做法。

  • 如果只是处理最后一个元素,用 linebottom 最快。
  • 如果需要获取循环中的任意一个位置(第1个、第2个、第3个...),或者进行复杂的布局控制,请务必使用 PHP autoindex 的方法,这是最专业、最灵活的解决方案。
-- 展开阅读全文 --
头像
dede栏目index.html如何生成?
« 上一篇 2025-12-11
龙书浩织梦建站VIP教程3,核心技巧是什么?
下一篇 » 2025-12-11

相关文章

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

目录[+]