这个标签是织梦实现聚合和频道式布局的关键,通常用于制作网站首页的栏目推荐区、图片新闻区等。

channelartlist 是什么?
channelartlist 的作用是从一个或多个指定的顶级栏目(频道)中,分别获取每个栏目的下属内容列表。
它能帮你实现这样的效果:
- 循环遍历 "公司新闻"、"产品中心"、"关于我们" 这几个顶级栏目。
- 对于 "公司新闻" 这个栏目,获取它最新的5条新闻列表。
- 对于 "产品中心" 这个栏目,获取它最新的5个产品列表。
- 最后将这些数据和HTML模板结合,渲染成一个完整的页面区块。
语法结构
{channelartlist typeid=''}
<li>
<h2><a href="{field:typeurl/}">{field:typename/}</a></h2>
<ul>
{dede:arclist titlelen='42' row='5'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
</li>
{/channelartlist}
核心属性说明
channelartlist 标签本身只有一个核心属性,但它决定了数据的来源。
typeid (必须)
这个属性用来指定要获取哪些栏目的列表,它的值可以是栏目ID,也可以是栏目ID的逗号分隔列表。

- 指定单个栏目:
typeid='1',只获取栏目ID为1的及其子栏目的列表。 - 指定多个栏目:
typeid='1,3,5',获取栏目ID为1、3、5的及其子栏目的列表。 - 获取所有顶级栏目:
typeid='0',这是最常用的用法,它会获取网站所有顶级(一级)栏目。
重要提示:typeid指定的栏目必须是顶级栏目(即没有上级栏目的栏目),如果指定了一个二级栏目,channelartlist会将其视为顶级栏目来处理,但其下不会再有子栏目数据。
底层变量(字段)
在 {channelartlist} 和 {/channelartlist} 之间,可以使用一些特殊的变量来获取当前循环到的栏目的信息。
| 变量名 | 说明 | 示例 |
|---|---|---|
{field:typename/} |
当前循环栏目的名称 | <h2>{field:typename/}</h2> |
{field:typeurl/} |
当前循环栏目的链接地址 | <a href="{field:typeurl/}">查看更多</a> |
嵌套标签 {dede:arclist}
channelartlist 的核心价值在于它可以嵌套 {dede:arclist} 标签。{arclist} 会在 {channelartlist} 所限定的当前栏目内获取文章列表。
{arclist} 在此处的特点:
- 作用域限定:
{arclist}默认只在{channelartlist}当前循环的栏目内查找文章,而不会去全站查找,这是它与独立使用{arclist}的最大区别。 - 常用属性:
row='数字':获取的文章数量,如row='5'表示获取5条。titlelen='数字'的字符长度,如titlelen='30'表示标题最多显示30个字符。infolen='数字':文章简介(的字符长度。imgwidth='数字'和imgheight='数字':缩略图的宽度和高度。orderby='pubdate':按发布时间排序。orderby='hot'按点击量排序。channelid='数字':指定频道模型ID,通常用于获取特定类型的内容(如文章、图集等)。
完整示例:制作首页推荐栏目区
假设我们要制作一个首页,显示“公司新闻”、“产品中心”、“客户案例”这三个栏目的最新内容。
步骤1:在后台获取栏目ID
登录织梦后台 -> “核心” -> “栏目管理”,找到这三个顶级栏目,记下它们的ID,假设分别是:
- 公司新闻 -> ID: 1
- 产品中心 -> ID: 2
- 客户案例 -> ID: 3
步骤2:修改首页模板文件
打开你的首页模板文件(通常是 /templets/default/index.htm),在你想显示推荐栏目的位置,添加如下代码:
<!-- 推荐栏目区开始 -->
<div class="recommend-section">
<div class="container">
<div class="row">
{channelartlist typeid='1,2,3'}
<div class="col-md-4">
<!-- 栏目标题 -->
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<a href="{field:typeurl/}">{field:typename/}</a>
<a href="{field:typeurl/}" class="pull-right">更多 ></a>
</h3>
</div>
<div class="panel-body">
<!-- 使用arclist获取该栏目下的文章列表 -->
<ul class="list-unstyled">
{dede:arclist row='5' titlelen='30'}
<li class="media">
<a href="[field:arcurl/]">
<img class="mr-3" src="[field:litpic/]" alt="[field:title/]" width="50" height="50">
</a>
<div class="media-body">
<a href="[field:arcurl/]" class="text-dark">[field:title/]</a>
<p class="small text-muted">[field:pubdate function="MyDate('Y-m-d', @me)"/]</p>
</div>
</li>
{/dede:arclist}
</ul>
</div>
</div>
</div>
{/channelartlist}
</div>
</div>
</div>
<!-- 推荐栏目区结束 -->
代码解析:
{channelartlist typeid='1,2,3'}:循环ID为1、2、3的三个顶级栏目。<div class="col-md-4">:假设你使用了Bootstrap框架,这会让每个栏目占据1/3的宽度。{field:typeurl/}和{field:typename/}:分别显示栏目的链接和名称。{dede:arclist row='5' titlelen='30'}:在当前栏目循环中,获取最新的5条文章,标题长度限制为30个字符。[field:arcurl/]、[field:title/]、[field:litpic/]:这些都是{arclist}标签的标准底层变量,用于获取单篇文章的链接、标题和缩略图。
常见问题与注意事项
-
Q: 为什么我的栏目列表显示不出来?
- A1: 检查
typeid:确保填写的ID是正确的顶级栏目ID,并且ID之间用英文逗号隔开。 - A2: 检查栏目内容:确保指定的栏目下已经有发布了的文章内容。
- A3: 检查模板标签:确保
{channelartlist}和{/channelartlist}成对出现,{arclist}正确嵌套在其中。
- A1: 检查
-
Q:
{arclist}获取的文章不是我想要的,怎么指定频道模型?- A: 在
{arclist}中添加channelid属性,如果你的“产品中心”使用的是“产品模型”(ID可能是5),你可以这样写:{channelartlist typeid='2'} {dede:arclist row='5' channelid='5'} ... {/dede:arclist} {/channelartlist}
- A: 在
-
Q: 如何给每个栏目循环块添加不同的CSS类?
- A: 可以使用
@me变量和runphp属性来实现,给第一个栏目加一个特殊的类first:{channelartlist typeid='1,2,3'} {php @me = ($GLOBALS['item__index'] == 1) ? 'panel-primary' : 'panel-default';} <div class="col-md-4"> <div class="panel <?php echo @me; ?>"> ... </div> </div> {/channelartlist}这个技巧比较高级,通常更简单的方法是在前端通过CSS的
nth-child()选择器来控制。
- A: 可以使用
希望这份详细的解析能帮助你完全掌握 channelartlist 标签的使用!
