在 DedeCMS(织梦)的栏目列表页中,要调用 “除本栏目以外的其他栏目内容”,核心是通过标签排除当前栏目的 ID(通常用 typeid 表示栏目 ID)。以下是两种常用实现方式,适用于不同场景:
一、直接调用其他栏目文章(不按栏目分组)
如果只需调用 “除当前栏目外的所有文章”(不区分具体栏目),可使用 {dede:arclist} 标签,通过 typeid 参数排除当前栏目 ID。
代码示例:
<!-- 在栏目列表页(list.htm)中使用 -->
<!-- 排除当前栏目,调用其他栏目最新10篇文章 -->
{dede:arclist
typeid='-{dede:field name="typeid"/}' <!-- "-"表示排除,后面跟当前栏目ID -->
row='10' <!-- 调用数量 -->
titlelen='60' <!-- 标题长度 -->
orderby='pubdate' <!-- 按发布时间排序 -->
}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="GetDateTimeMK(@me)"/]</span>
</li>
{/dede:arclist}
关键说明:
- {dede:field name="typeid"/} 用于获取当前栏目 ID(列表页中有效)。
- typeid='-{dede:field name="typeid"/}' 中,- 符号表示 “排除该栏目 ID”,因此会调用所有非当前栏目的文章。
- 可根据需求调整 row(数量)、orderby(排序,如 click 按点击量)、imgwidth(缩略图宽度)等参数。
二、按其他栏目分组调用(带栏目名称)
如果需要 “按栏目分组显示内容”(即先显示栏目名称,再显示该栏目下的文章,且排除当前栏目),可使用 {dede:channelartlist} 标签循环其他栏目,再嵌套 {dede:arclist} 调用文章。
代码示例:
<!-- 在栏目列表页(list.htm)中使用 -->
<!-- 循环除当前栏目外的其他栏目,每个栏目显示5篇文章 -->
{dede:channelartlist
typeid!='{dede:field name="typeid"/}' <!-- 排除当前栏目 -->
row='5' <!-- 显示5个其他栏目 -->
}
<div class="other-channel">
<!-- 栏目名称 -->
<h3><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h3>
<!-- 该栏目下的文章列表 -->
<ul>
{dede:arclist
titlelen='50'
row='5' <!-- 每个栏目调用5篇文章 -->
orderby='pubdate'
}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
</div>
{/dede:channelartlist}
关键说明:
- {dede:channelartlist} 用于循环栏目,typeid!='{dede:field name="typeid"/}' 表示排除当前栏目。
- 内部嵌套的 {dede:arclist} 会自动调用当前循环到的栏目的文章(无需额外指定 typeid)。
- row='5'(channelartlist 的参数)控制显示多少个其他栏目,可根据需求调整。
补充说明:
- 排除多个栏目:如果需要排除多个栏目(含当前栏目),可在 typeid 中用逗号分隔,例如:
typeid='-{dede:field name="typeid"/},-10,-11'(排除当前栏目 + ID 为 10、11 的栏目)。
- 子栏目处理:如果需要排除当前栏目及其子栏目,需先获取子栏目 ID(可通过 SQL 查询),再统一排除(较复杂,需结合织梦的 type 表处理)。
- 缓存问题:修改后若未生效,可在后台 “生成”→“更新缓存” 刷新系统缓存。
通过以上方法,可灵活实现 “排除当前栏目,调用其他栏目内容” 的需求,根据是否需要按栏目分组选择对应方案即可。感谢www.gd230.com提供。
