场景说明
假设我们有一个栏目,其ID为 5,我们希望所有发布在这个栏目ID为 5 的文章,在前台网站列表页、内容页等地方,都。

修改 arclist 标签(推荐,最灵活)
这是最常用且最灵活的方法,适用于在列表页(如首页、栏目页)通过 {dede:arclist} 标调用文章时进行隐藏。
原理: 通过 arclist 标签的 channelid 和 typeid 属性,结合 orderby 和 filter 等属性,可以精确地控制要调用哪些文章,我们可以利用这个特性来“过滤”掉我们不希望显示的栏目下的文章。
操作步骤:
-
找到您需要调用文章的模板文件,通常是
index.htm(首页),list_article.htm(栏目列表页) 等。
(图片来源网络,侵删) -
找到其中的
{dede:arclist} -
在标签内添加以下属性:
{dede:arclist channelid='1' typeid='这里是你当前栏目的ID' orderby='pubdate' row='10'} <!-- 我们通过条件判断来决定是否显示标题 --> [field:runphp='yes'] if (@me == 5) { // 如果文章属于栏目ID为5的栏目,则不输出任何内容 @me = ""; } else { // 否则,正常输出标题 @me = "<a href='{@me}'>".GetArcTitle(@me)."</a>"; } [/field:runphp] <!-- 或者更简单的方式,直接排除栏目ID为5的文章 --> <!-- 注意:这种方法更推荐,因为它从源头上就排除了,效率更高 --> <!-- 但是标准的arclist标签没有直接排除某个typeid的属性,所以我们需要用子查询的方式 --> {/dede:arclist}
更简单、更推荐的 arclist 写法(使用子查询排除):
DedeCMS 的 arclist 标签支持通过 sql 属性自定义查询语句,这是最彻底、最干净的方法。
{dede:arclist
row='10'
orderby='pubdate'}
<!-- 这里的 [field:id] 和 [field:title] 等标签会正常工作 -->
<!-- 因为arclist已经自动过滤掉了栏目ID为5下的所有文章 -->
{/dede:arclist}
关键在于如何调用 arclist。 如果您是在首页调用所有栏目的文章,但又想排除ID为5的栏目,您需要修改PHP文件或在标签中使用更复杂的逻辑,对于单个列表页,最简单的方法是确保这个列表页的 arclist 不要去调用那个栏目,列表页的 arclist 默认只调用本栏目的文章,所以只要那个“隐藏栏目”不是当前列表页的父栏目或子栏目,就已经自然隐藏了。
如果您想在首页等地方全局排除,建议使用下面的方法二或方法三。
修改数据库 arctitle 字段(彻底,但有风险)
原理: 直接修改数据库,将目标栏目下所有文章的标题字段清空或替换为一个空格,这样,无论在任何地方调用标题,都显示为空。
⚠️ 警告:此方法有风险,操作前务必备份数据库! 如果操作不当,可能会导致数据问题。
操作步骤:
-
备份数据库! 这是最重要的一步。
-
登录您的网站数据库管理工具(如 phpMyAdmin)。
-
找到 DedeCMS 的数据表,通常是
dede_archives(文章主表)。 -
执行以下 SQL 语句:
-- 将栏目ID为5的所有文章的标题清空 UPDATE `dede_archives` SET title = '' WHERE typeid = 5; -- 或者,将标题替换为一个空格,这样在后台管理时还能看到位置,方便后续恢复 UPDATE `dede_archives` SET title = ' ' WHERE typeid = 5;
优点:
- 一劳永逸:修改后,全站任何地方调用标题都不会显示。
- 效率高:是数据库层面的操作,性能最好。
缺点:
- 有风险:直接操作数据库,如果误操作(比如写错了ID),可能会影响其他数据。
- 不可逆:除非您有备份,否则清空的标题无法恢复。
- 后台也看不到:在后台“内容发布”->“普通文章”里,这些文章的标题也会是空的,可能会影响管理。
修改程序文件 arc.archives.class.php (最通用,需谨慎)
原理: 修改 DedeCMS 核心文件,在系统准备输出文章标题时,进行判断,如果文章属于指定栏目,就返回一个空字符串。
⚠️ 警告:此方法会修改核心文件,在进行DedeCMS升级时,这些修改会被覆盖,需要重新修改。
操作步骤:
-
找到并下载文件:
/include/arc.archives.class.php -
用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开它。
-
搜索
GetTitle()函数(通常在文件的中后部分)。 -
在
GetTitle()函数中找到返回标题的代码行,通常是return $title;。 -
在这行代码之前,添加判断逻辑。
// 在 arc.archives.class.php 文件中修改 GetTitle() 函数 // ... 函数其他代码 ... // 在 return $title; 之前添加如下代码: // 如果文章属于栏目ID为5,则返回空字符串 if($this->Fields['typeid'] == 5) { return ''; } // 原有的返回代码 return $title; // ... 函数其他代码 ... -
保存文件,并上传到服务器,覆盖原文件,可能需要清除网站缓存才能看到效果。
优点:
- 效果全面:所有调用
GetTitle()函数的地方(包括列表页、内容页、相关文章等)都会生效。 - 逻辑清晰:修改集中在核心文件的一个函数里,易于理解。
缺点:
- 升级覆盖:每次升级 DedeCMS 到新版本,都需要重新修改这个文件。
- 需要代码能力:需要一定的PHP代码阅读和修改能力。
总结与推荐
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
修改 arclist |
灵活、安全、不影响系统 | 需要在每个模板文件中手动设置,不够“自动化” | 最推荐,适用于绝大多数情况,特别是只想在特定页面隐藏标题时。 |
| 修改数据库 | 彻底、一劳永逸、效率高 | 有风险、不可逆、影响后台管理 | 适用于确定不再需要这些标题,且对数据库操作非常熟练的用户。 |
| 修改核心文件 | 效果全面、自动化 | 升级会覆盖、需要代码能力 | 适用于需要全站范围内(所有页面)统一隐藏某个栏目标题,且不介意手动维护修改的用户。 |
给您的建议:
- 如果您只是想在首页或某个列表页不显示某个栏目的标题,请优先使用方法一。
- 如果您希望整个网站都看不到这些标题,并且愿意承担风险和后续维护,可以选择方法三。
- 方法二风险较高,除非您有特殊需求,否则不推荐普通用户使用。
