在栏目调用标签(如 {dede:channel})中增加一个 typeid 属性,直接指定要调用的隐藏栏目的 ID。

下面我将分几种详细情况来解释,从最简单到最复杂的场景。
核心原理:理解“隐藏”栏目
在 DedeCMS 后台,栏目的“隐藏”功能是通过一个字段来控制的,这个字段通常叫做 ishidden。
ishidden = 0:栏目不隐藏(正常显示)。ishidden = 1:栏目隐藏(在默认的顶级栏目调用中不显示)。
DedeCMS 的默认栏目调用标签(如 {dede:channel type='top'})会自动过滤掉 ishidden = 1 的栏目,要让它们显示出来,我们必须绕过这个默认过滤机制。
直接指定栏目 ID 调用(最常用、最简单)
这是最直接的方法,适用于你知道要调用的隐藏栏目的 ID 的情况。

适用场景:
- 在页脚调用“关于我们”、“联系方式”等隐藏栏目。
- 页调用相关的隐藏栏目列表。
标签语法:
{dede:channel typeid='栏目ID' row='数量'}
<a href='[field:typeurl/]'>[field:typename/]</a>
{/dede:channel}
关键参数说明:
typeid='栏目ID':这是核心参数,填写你想要调用的那个隐藏栏目的 ID,如果需要调用多个,用英文逗号隔开,typeid='5,12,18'。row='数量':表示要调用的栏目数量,对于指定单个栏目,此参数通常省略。type='top':注意,当你使用了typeid参数后,type参数的作用可能会被改变或忽略。typeid指定了精确的栏目,系统就不会再根据type(如顶级、下级)去自动查找了。
示例:

假设你有一个隐藏的栏目“网站地图”,其栏目 ID 为 18,你想在页脚调用它。
<footer>
<div class="footer-links">
<a href="{dede:global.cfg_cmsurl/}/">首页</a>
<a href="/about.html">关于我们</a>
<!-- 假设网站地图的栏目ID是18 -->
<a href="{dede:channel typeid='18' type='self'}[field:typeurl/]{/dede:channel}">网站地图</a>
</div>
</footer>
或者更简洁的写法:
<a href="[field:typelink/]">网站地图</a>
将 {dede:channel typeid='18'}...{/dede:channel} 整体替换为 [field:typelink/] 即可。
调用所有栏目(包括隐藏的)
如果你需要在一个列表中同时显示正常栏目和隐藏栏目,可以使用 type='son' 或 type='self' 并指定父栏目 ID。
适用场景:
- 制作网站地图页面。
- 制作面包屑导航时,需要显示所有层级的栏目。
标签语法:
{dede:channel type='son' typeid='父栏目ID' noself='no'}
<a href='[field:typeurl/]'>[field:typename/]</a>
{/dede:channel}
关键参数说明:
type='son':表示调用指定栏目(typeid)下的所有子栏目。typeid='父栏目ID':指定要查询其子栏目的父栏目,如果你想调用全站所有栏目,可以留空或写一个顶级栏目的 ID。noself='no':这个参数非常重要,默认情况下,type='son'不会包含栏目本身,设置为no表示包含栏目本身,这对于制作面包屑导航非常有用。
示例:
假设你有一个顶级栏目“内容中心”,ID 为 3,它下面有“新闻”、“产品”两个正常栏目,和一个隐藏的“下载”栏目,你想在“内容中心”的列表页显示所有子栏目(包括隐藏的)。
在列表页模板 list_article.htm 中,{dede:field name='typeid'/} 会自动获取当前栏目的 ID,所以可以这样写:
<ul>
{dede:channel type='son' typeid='3' noself='no'}
<li>
<a href="[field:typeurl/]">[field:typename/]</a>
<!-- (可选) 显示该栏目是否隐藏 -->
<small>(状态: [field:ishidden function='(@me == 1 ? "隐藏" : "显示")'/])</small>
</li>
{dede:channel}
</ul>
这里的 typeid='3' 是硬编码的,在实际应用中,如果你想获取当前栏目下的所有子栏目(包括隐藏的),可以直接使用 typeid 变量:
{dede:channel type='son' typeid='{dede:field name='typeid'/}' noself='no'}
...
{/dede:channel}
在特定页面调用隐藏栏目(如首页)
你可能想在首页的某个特定位置调用一个隐藏的栏目,友情链接”或“广告合作”。
适用场景:
- 首页侧边栏调用一个隐藏的“合作伙伴”栏目列表。
- 首页底部调用一个隐藏的“版权信息”栏目。
实现步骤:
- 创建隐藏栏目:在后台“栏目管理”中,创建一个新栏目,合作伙伴”,并勾选“隐藏”选项,记下它的栏目 ID(假设为
25)。 - 修改首页模板:打开首页模板文件
index.htm。 - 插入调用标签:在你希望显示的位置,插入方法一的标签。
示例代码:
<!-- 在首页的某个 div 中 -->
<div class="partner-section">
<h3>我们的合作伙伴</h3>
<ul>
{dede:channel typeid='25' row='10'}
<li><a href="[field:typeurl/]" target="_blank">[field:typename/]</a></li>
{/dede:channel}
</ul>
</div>
重要注意事项
- 栏目 ID 是关键:所有方法都依赖于正确的栏目 ID,你可以在 DedeCMS 后台“栏目管理”中,将鼠标悬停在栏目名称上,浏览器状态栏会显示 ID,或者直接查看数据库的
dede_arctype表。 - 缓存问题:DedeCMS 有强大的缓存机制,当你修改了模板或栏目设置后,如果前台页面没有立即更新,请务必去后台“系统” -> “系统设置” -> “清除所有缓存”,然后刷新前台页面。
- 权限问题:确保你调用隐藏栏目的模板文件没有被其他规则(如自定义的 PHP 函数)所过滤。
typeid与type的关系:一旦你使用了typeid参数,系统就会精确查找这个 ID 的栏目,type参数(如top,son)的筛选作用就会减弱或失效。typeid='5'就只调用 ID 为 5 的那个栏目,不管它是不是顶级栏目。
| 调用需求 | 推荐标签 | 关键参数 |
|---|---|---|
| 调用单个或指定的隐藏栏目 | {dede:channel} |
typeid='隐藏栏目ID' |
| 调用某栏目下的所有子栏目(含隐藏) | {dede:channel} |
type='son' + typeid='父栏目ID' + noself='no' |
| 在首页等特定页面调用隐藏栏目 | {dede:channel} |
typeid='隐藏栏目ID' |
希望这份详细的指南能帮助你成功地在 DedeCMS 中调用隐藏栏目!
