修改文章列表页模板(推荐,最常用)
这是最直接的方法,可以精确控制列表页中副栏目的显示,通常需要修改两个模板文件:list_article.htm 和 list_image.htm。

(图片来源网络,侵删)
操作步骤:
-
登录后台:使用管理员账号登录您的 DedeCMS 后台。
-
进入模板管理:在左侧菜单栏中,找到 “模板” -> “模板管理”。
-
选择要修改的栏目:
- 在“模板管理”页面,点击您想要修改的栏目名称对应的 “修改” 按钮。
- 或者,如果您想一次性修改所有列表页,可以直接点击顶部的 “默认模板管理”。
-
修改列表模板:
(图片来源网络,侵删)- 找到并点击
list_article.htm(文章列表模板)或list_image.htm(图片列表模板)对应的 “修改” 按钮。 - 在模板代码中,找到循环输出文章信息的部分,通常是这样的结构:
{dede:list pagesize='20'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> <p>栏目:[field:typename/]</p> <!-- 这里通常就是显示栏目信息的地方 --> </li> {/dede:list} - 关键一步:找到显示栏目名称的标签,它可能是
[field:typename/],也可能是[field:typedir/]或者嵌套在<a>标签里,最常见的就是[field:typename/]。 - 删除或注释:直接删除包含副栏目信息的代码行,删除上面例子中的
<p>栏目:[field:typename/]</p>这一行,如果不确定,可以先注释掉(在代码前后加上<!--和-->),然后刷新页面查看效果。
- 找到并点击
-
保存并更新:
- 点击模板编辑器底部的 “保存” 按钮。
- 返回到网站的前台,刷新对应的列表页面,您会发现副栏目名称已经不再显示了。
优点:
- 精确控制,只影响列表页的显示。
- 操作简单,直接修改模板即可。
缺点:
- 如果更换了模板,需要重新修改。
修改 include/arc.listview.class.php 文件(全局性修改)
这个方法会从根本上改变 DedeCMS 调用列表数据的方式,让它在生成列表时根本不包含副栏目信息,这是一种更底层的修改,可以实现“全局关闭”。
⚠️ 重要警告:
此方法涉及修改核心PHP文件,强烈建议在修改前先备份该文件,以防操作失误导致网站无法正常运行。
操作步骤:
-
备份文件:通过FTP或文件管理器,找到并下载
include/arc.listview.class.php文件,进行备份。 -
编辑文件:用代码编辑器(如 Notepad++, VS Code 等)打开
include/arc.listview.class.php文件。 -
找到并修改代码:
- 在文件中搜索
GetArcList函数(这是一个大函数,里面包含了很多逻辑)。 - 在这个函数内部,找到
$query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM{$this->AddTable}arc LEFT JOINdede_arctypetp ON arc.typeid=tp.id WHERE {$this->AddSql} $orderquery";这行类似的SQL查询语句。 - 修改SQL查询:我们需要修改这个
SELECT语句,让它不查询副栏目相关的字段,默认情况下,副栏目信息是通过tp.typename等字段传递的,最简单粗暴的方法是直接移除这些字段,只保留我们需要的。 - 修改前 (示例):
// ... 其他代码 ... $query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM `{$this->AddTable}` arc LEFT JOIN `dede_arctype` tp ON arc.typeid=tp.id WHERE {$this->AddSql} $orderquery"; // ... 其他代码 ... - 修改后 (移除了
tp.typename等字段):// ... 其他代码 ... // 移除了 tp. 后面的所有字段,只保留 arc.* 和 tp.typedir (如果需要栏目链接) $query = "SELECT arc.*,tp.typedir FROM `{$this->AddTable}` arc LEFT JOIN `dede_arctype` tp ON arc.typeid=tp.id WHERE {$this->AddSql} $orderquery"; // ... 其他代码 ... - 注意:修改后,模板中所有依赖
tp.typename的标签(如[field:typename/])都将无法获取到数据并显示为空,这正好达到了我们的目的。
- 在文件中搜索
-
保存文件:保存修改后的
arc.listview.class.php文件。 -
更新缓存:登录 DedeCMS 后台,进入 “系统” -> “一键更新网站” -> “更新HTML”,选择更新所有列表页,让修改生效。
优点:
- 全局生效,一劳永逸,无需修改每个模板。
- 从根本上解决问题,性能上可能略有提升(因为查询的字段变少了)。
缺点:
- 风险较高,修改错误可能导致网站列表页无法显示。
- 是一个“一刀切”的方法,如果你只想关闭某些栏目的副栏目显示,此方法不适用。
- 如果未来升级 DedeCMS,这个修改可能会被覆盖。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 修改模板 | 安全、简单、精确,不影响系统核心。 | 更换模板后需重新修改。 | 绝大多数情况下的首选方法,特别是只想修改特定栏目时。 |
| 修改PHP文件 | 全局生效,一劳永逸,可能提升性能。 | 有风险,操作复杂,升级会失效。 | 对所有列表页都有统一要求,且不介意修改核心文件的用户。 |
对于绝大多数用户来说,强烈推荐使用方法一,它更安全、更灵活,也符合模板分离的设计思想,只有在您有非常明确的、全局性的需求,并且对 DedeCMS 有一定了解时,才考虑使用方法二。
