默认情况下,DedeCMS的栏目列表页(list_article.htm)模板在调用文章时,如果当前栏目有子栏目,会默认显示“本栏目及子栏目”下的所有文章。

(图片来源网络,侵删)
要实现“仅显示本栏目文章”,你需要修改模板文件,这里提供两种方法,强烈推荐第一种方法,因为它更灵活、更符合织梦的设计思想。
修改列表页模板(推荐,最灵活)
这是最标准也是最推荐的方法,你只需要修改当前顶级栏目对应的列表页模板文件即可,不影响其他栏目。
操作步骤:
-
找到模板文件
- 登录你的DedeCMS后台。
- 进入【模板】->【默认模板管理】。
- 找到你想要修改的顶级栏目对应的列表页模板,文件名通常类似于
list_article.htm,如果你为不同栏目设置了不同的模板,请确保修改的是正确的那个。
-
修改调用标签
(图片来源网络,侵删)- 在模板文件中,找到调用文章列表的标签,它通常是这样的形式:
{dede:list pagesize='20'}或者
{dede:arclist titlelen='42' row='20'} - 关键一步:给这个标签添加一个
typeid属性,并将其值设置为this或当前栏目的ID。 - 使用
typeid='this'(推荐):this是一个特殊变量,代表当前栏目,这种方法非常直观,即使你移动或重命名了栏目,也无需修改模板。
- 在模板文件中,找到调用文章列表的标签,它通常是这样的形式:
-
修改示例
-
修改前 (默认可能的样子):
<ul> {dede:list} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> </li> {/dede:list} </ul>这个标签会显示当前栏目及其所有子栏目的文章。
(图片来源网络,侵删) -
修改后 (仅显示本栏目):
<ul> {dede:list typeid='this' pagesize='20'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> </li> {/dede:list} </ul>或者,如果你使用的是
arclist<ul> {dede:arclist typeid='this' titlelen='42' row='20'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> </li> {/dede:arclist} </ul>
-
-
更新缓存
- 保存模板文件后,回到DedeCMS后台首页。
- 点击右上角的【生成】->【一键更新所有】->【更新HTML】。
- 建议先【更新栏目】,更新文档HTML】,更新主页】,这样能确保所有改动都生效。
完成以上步骤后,你再访问这个顶级栏目的列表页,就会发现它只显示属于本栏目自己的文章了。
修改系统核心文件(不推荐,有风险)
这种方法会改变DedeCMS的全局默认行为,即所有的顶级栏目列表页都将只显示本栏目文章,如果你有多个顶级栏目,并且希望它们的行为保持一致,可以考虑此方法,但请注意,这会影响整个系统,升级DedeCMS时可能会被覆盖。
操作步骤:
-
找到并打开PHP文件
- 通过FTP或文件管理器,进入你的DedeCMS网站根目录。
- 找到并打开
/include/arc.listview.class.php文件。
-
修改查询逻辑
- 在文件中搜索
$this->addSql .= " And (arc.typeid IN ($typeid) $orson) ";这一行代码,这行代码的作用就是拼接SQL查询条件,把当前栏目和所有子栏目都包含进去。 - 修改为:将这行代码替换为只查询当前栏目ID。
// 修改前 // $this->addSql .= " And (arc.typeid IN ($typeid) $orson) ";
// 修改后 $this->addSql .= " And arc.typeid IN ($typeid) ";
* **解释**: * `$typeid` 变量本身就包含了当前栏目的ID。 * `$orson` 变量是用来拼接子栏目ID的(`OR arc.typeid IN (子栏目ID1,子栏目ID2...)`)。 * 我们移除了 `$orson` 部分,这样SQL语句就只会查询 `typeid` 等于当前栏目ID的文章。 - 在文件中搜索
-
更新缓存
和方法一一样,登录后台,执行【生成】操作,更新栏目和文档HTML。
⚠️ 方法二的缺点:
- 全局影响:这会改变整个系统的行为,你可能不希望所有顶级栏目都这样。
- 升级风险:当你升级DedeCMS版本时,这个被修改的文件会被新版本覆盖,导致设置失效,需要重新修改。
- 维护困难:如果网站由多人维护,其他人可能不知道这个核心文件的修改,容易造成混淆。
| 特性 | 方法一 (修改模板) | 方法二 (修改核心文件) |
|---|---|---|
| 推荐度 | ⭐⭐⭐⭐⭐ (强烈推荐) | ⭐ (不推荐) |
| 灵活性 | 高:可以针对每个顶级栏目单独设置。 | 低:全局生效,无法单独控制。 |
| 安全性 | 高:不修改核心文件,不影响系统升级。 | 低:修改核心文件,升级后失效,有风险。 |
| 适用场景 | 绝大多数情况,特别是不同栏目有不同需求时。 | 所有顶级栏目都需要统一行为,且不打算升级系统。 |
对于99%的需求,请使用方法一,它简单、安全、且最符合DedeCMS的模板化设计理念。
