这是一个非常常见的需求,尤其是在制作网站首页、列表页或者自定义模型页面时。

(图片来源网络,侵删)
核心标签:typeid
要调用当前栏目的文章,关键在于 {dede:arclist} 标签中的 typeid 属性。
typeid: 指定要获取文章的栏目ID,如果你把它留空或者不写,DedeCMS 会自动获取当前页面的栏目ID。
最简单、最常用的方法就是直接省略 typeid 属性。
最简单的方法(省略 typeid)
这是最直接的方式,适用于所有需要调用当前栏目文章的场景,如首页、列表页等。
代码示例:

(图片来源网络,侵删)
{dede:arclist titlelen='40' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
代码解析:
{dede:arclist ...}: 调用文章列表的起始标签,len='40'`: 限制标题长度为40个字符(一个汉字算2个字符)。row='10': 调用10篇文章。[field:arcurl/]: 输出文章的链接地址。[field:title/]:输出文章的标题。[field:pubdate ...]: 输出文章的发布日期,并用function="MyDate('Y-m-d',@me)"格式化为年-月-日的格式。- 调用文章列表的结束标签。
因为这里没有指定 typeid,所以系统会自动判断当前所在的栏目,并调用该栏目下的文章。
明确指定当前栏目ID(适用于特定场景)
在某些复杂模板中,你可能希望代码更具可读性,或者明确地传递栏目ID,这时,你可以使用 {dede:global} 标签来获取当前栏目的ID,然后赋值给 typeid。
代码示例:
{dede:arclist typeid='{dede:global.typeid/}' titlelen='40' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
代码解析:
typeid='{dede:global.typeid/}': 这里我们使用了全局变量typeid,它会自动获取当前页面的栏目ID,并将其作为typeid的值传递给arclist- 这种写法和方法一的效果完全一样,但有时在逻辑上更清晰。
常用属性补充
在实际使用中,你可能会用到更多的属性来控制输出内容,以下是一些最常用的属性:
| 属性名 | 说明 | 示例 |
|---|---|---|
typeid |
核心属性:指定栏目ID,多个ID用英文逗号隔开,如 typeid='1,2'。 |
typeid='' (自动获取) 或 typeid='1' |
row |
调用文章的数量。 | row='5' (调用5篇) |
infolen |
简介(长度。 | infolen='200' |
orderby |
排序方式,常用值:pubdate (发布日期)、click (点击量)、id (文章ID)、sortrank (文章排序级别)。 |
orderby='pubdate' |
orderway |
排序方式。desc (降序,默认)、asc (升序)。 |
orderway='desc' |
channelid |
指定模型ID。1代表文章,2代表图集,以此类推。 |
channelid='1' |
subday |
调用指定天数内发布的文章。 | subday='7' (调用7天内发布的文章) |
idlist |
调用指定ID的文章,多个ID用英文逗号隔开。 | idlist='1,3,5' |
noflag |
排除特定标记的文章,如 noflag='h' 则不调用带有 h 标记的文章。 |
noflag='h' |
flag |
只调用带有特定标记的文章,如 flag='c' 则只调用推荐文章。 |
flag='c' |
高级用法:调用当前栏目及其子栏目的文章
我们不仅需要当前栏目的文章,还需要它所有子栏目下的文章,这时就需要用到 son 属性。
场景: 在一个顶级栏目(如“新闻中心”)的列表页,我们希望同时显示“新闻中心”本身以及其下所有子栏目(如“国内新闻”、“国际新闻”)的文章。
代码示例:
{dede:arclist typeid='' row='20' orderby='pubdate' orderway='desc' noflag='h'}
<li>
<span class="category">[field:typename/]</span>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
关键点:
typeid='':保持为空,系统会自动获取当前栏目ID。son='0':这是默认值,表示不包含子栏目,但我们不写这个属性,就默认是只调用当前栏目。son='1':如果写成这样,则会调用当前栏目ID为顶级栏目下的所有子栏目文章,但这个用法比较局限,更推荐使用自定义SQL来实现更灵活的调用。
更灵活的调用方法(推荐):
{dede:arclist row='20' orderby='pubdate'}
<li>
<span class="category">[field:typename/]</span>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
当你在一个列表页(list_*.htm)使用这段代码时,它会自动调用当前栏目及其所有下级栏目的文章,这是 DedeCMS arclist 标签一个非常智能的特性。
| 需求 | 推荐代码 | 说明 |
|---|---|---|
| 仅调用当前栏目的文章 | {dede:arclist row='10'}...{/dede:arclist} |
最常用,直接省略 typeid 即可。 |
| 明确指定当前栏目 | {dede:arclist typeid='{dede:global.typeid/}'}...{/dede:arclist} |
逻辑更清晰,与方法一效果相同。 |
| 调用当前栏目及子栏目的文章 | {dede:arclist row='10'}...{/dede:arclist} |
在列表页使用时,会自动包含子栏目。 |
希望这份详细的解释能帮助你完全掌握在 DedeCMS 中使用 {dede:arclist} 调用当前栏目文章的方法!
