欢迎访问艾立兹站 Aliz- 专注建站教程与技术分享
您当前的位置:首页 > 建站教程 > 织梦CMS教程

织梦 channelartlist 标签 itemindex 序号判断用法详解

时间:2026-07-12 10:23:20  来源:阿里站  作者:SKY  阅读:

一、基础说明

1、channelartlist 标签作用

{dede:channelartlist} 用于循环调用多个顶级 / 父栏目及其下级栏目内容,常用于首页多栏目区块布局。

  • itemindex循环索引变量,从 0 开始计数(0,1,2,3...)
  • 可配合织梦底层模板标签 @me + if 判断语法,实现按序号差异化样式、布局

✅ 关键:itemindex 默认起始值 = 0(第一行 = 0、第二行 = 1、第三行 = 2……)

2、基础语法格式

{dede:channelartlist typeid='top' row='6'}
    {dede:field.itemindex runphp='yes'}
        @me = @me; // 获取当前循环序号
    {/dede:field.itemindex/}
    <div class="item">
        <h3><a href="{dede:field.typeurl/}">{dede:field.typename/}</a></h3>
    </div>
{/dede:channelartlist}

二、核心判断写法(runphp 语法)

✅ 写法原理

  • {dede:field.itemindex runphp='yes'}:读取当前循环索引
  • 通过 if 判断序号,输出不同 class 或样式

示例 1:第一个栏目添加高亮样式(itemindex=0)

<pre class="language-html"><code>
{dede:channelartlist typeid='top' row='6'}
{dede:field.itemindex runphp='yes'} if(@me == 0)
{ @me = "item first-item"; // 第一条样式 }else{ @me = "item"; // 默认样式 }
{/dede:field.itemindex/}<div class="[field:itemindex/]"> <h3><a href="{dede:field.typeurl/}">{dede:field.typename/}</a></h3> <p>{dede:field.description/}</p> </div> {/dede:channelartlist} <style> .item{padding:15px;border:1px solid #eee;margin-bottom:10px;} .first-item{background:#f5f7fa;border-color:#007fff;} </style>

</code></pre>

示例 2:隔行变色(奇偶行区分样式)

<pre class="language-html"><code> {dede:channelartlist typeid='top' row='6'} {dede:field.itemindex runphp='yes'} if(@me % 2 == 0){ @me = "item even"; // 偶数索引:0,2,4... }else{ @me = "item odd"; // 奇数索引:1,3,5... } {/dede:field.itemindex/} <div class="[field:itemindex/]"> <a href="{dede:field.typeurl/}">{dede:field.typename/}</a> </div> {/dede:channelartlist} <style> .item{padding:15px;} .even{background:#f8f8f8;} .odd{background:#ffffff;} </style>

</code></pre>

示例 3:每 3 列清除浮动 / 换行布局

<pre class="language-html"><code> {dede:channelartlist typeid='top' row='6'} {dede:field.itemindex runphp='yes'} if((@me+1) % 3 == 0){ @me = "item fl-clear"; // 第3/6/9项清除浮动 }else{ @me = "item fl"; } {/dede:field.itemindex/} <div class="[field:itemindex/]"> <a href="{dede:field.typeurl/}">{dede:field.typename/}</a> </div> {/dede:channelartlist} <style> .fl{float:left;width:33.3%;box-sizing:border-box;} .fl-clear{float:left;width:33.3%;box-sizing:border-box;clear:right;} </style>

</code></pre>

注意:这里用 @me+1 转为从 1 开始计数,方便按行取余布局

示例 4:最后一项单独样式

<pre class="language-html"><code> {dede:channelartlist typeid='top' row='6'} {dede:field.itemindex runphp='yes'} if(@me == 5){ // row=6 索引是0~5,最后一条索引=5 @me = "item last"; }else{ @me = "item"; } {/dede:field.itemindex/} <div class="[field:itemindex/]"> <a href="{dede:field.typeurl/}">{dede:field.typename/}</a> </div> {/dede:channelartlist} </code></pre>

三、关键细节 & 避坑

  1. 起始索引问题
    • itemindex 默认从 0 开始,不是 1
    • 需要按 1 开始计数:判断时用 @me+1
    • 例:第一条 = @me == 0 / @me+1 == 1
  2. 必须写 runphp='yes'
    • 否则无法执行 PHP 判断语句,直接原样输出代码
    • 不要破坏外层 channelartlist 标签闭合格式
  3. 内层子循环(arclist)和外层 itemindex 区分
    • channelartlistitemindex = 栏目循环序号
    • 内层再套 arclist 标签,要用 arclist 自己的序号字段,不要混用
  4. 缓存问题
    • 修改模板后,后台更新全站缓存,否则样式不生效
  5. 版本兼容
    • 适用于主流 UTF 版本织梦,旧版若异常可检查模板引擎解析设置

四、进阶写法(直接输出 HTML 内容)

<pre class="language-html"><code> {dede:channelartlist typeid='top' row='4'} {dede:field.itemindex runphp='yes'} if(@me == 0){ @me = '<div class="big-box">主栏目区块'; }else{ @me = '<div class="normal-box">普通栏目区块'; } {/dede:field.itemindex/} <h3>{dede:field.typename/}</h3> </div> {/dede:channelartlist} </code></pre>

五、总结

  1. channelartlistitemindex = 栏目循环索引,默认从 0 开始计数
  2. 通过 {dede:field.itemindex runphp='yes'} + PHP if 判断实现差异化布局
  3. 常用场景:首栏高亮、隔行变色、栅格布局换行、最后一项清除浮动
  4. 修改模板后务必更新织梦缓存,保证布局正常渲染

本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载

发表评论 共有0条评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
公众号二维码

扫码关注公众号
获取全套技术教程