dede顶级栏目如何只显示本栏目文章?

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 DEDE建站 正文

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

dede顶级栏目只显示本栏目文章
(图片来源网络,侵删)

要实现“仅显示本栏目文章”,你需要修改模板文件,这里提供两种方法,强烈推荐第一种方法,因为它更灵活、更符合织梦的设计思想。


修改列表页模板(推荐,最灵活)

这是最标准也是最推荐的方法,你只需要修改当前顶级栏目对应的列表页模板文件即可,不影响其他栏目。

操作步骤:

  1. 找到模板文件

    • 登录你的DedeCMS后台。
    • 进入【模板】->【默认模板管理】。
    • 找到你想要修改的顶级栏目对应的列表页模板,文件名通常类似于 list_article.htm,如果你为不同栏目设置了不同的模板,请确保修改的是正确的那个。
  2. 修改调用标签

    dede顶级栏目只显示本栏目文章
    (图片来源网络,侵删)
    • 在模板文件中,找到调用文章列表的标签,它通常是这样的形式:
      {dede:list pagesize='20'}

      或者

      {dede:arclist titlelen='42' row='20'}
    • 关键一步:给这个标签添加一个 typeid 属性,并将其值设置为 this 或当前栏目的ID。
    • 使用 typeid='this' (推荐)this 是一个特殊变量,代表当前栏目,这种方法非常直观,即使你移动或重命名了栏目,也无需修改模板。
  3. 修改示例

    • 修改前 (默认可能的样子):

      <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>

      这个标签会显示当前栏目及其所有子栏目的文章。

      dede顶级栏目只显示本栏目文章
      (图片来源网络,侵删)
    • 修改后 (仅显示本栏目):

      <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>
  4. 更新缓存

    • 保存模板文件后,回到DedeCMS后台首页。
    • 点击右上角的【生成】->【一键更新所有】->【更新HTML】。
    • 建议先【更新栏目】,更新文档HTML】,更新主页】,这样能确保所有改动都生效。

完成以上步骤后,你再访问这个顶级栏目的列表页,就会发现它只显示属于本栏目自己的文章了。


修改系统核心文件(不推荐,有风险)

这种方法会改变DedeCMS的全局默认行为,即所有的顶级栏目列表页都将只显示本栏目文章,如果你有多个顶级栏目,并且希望它们的行为保持一致,可以考虑此方法,但请注意,这会影响整个系统,升级DedeCMS时可能会被覆盖。

操作步骤:

  1. 找到并打开PHP文件

    • 通过FTP或文件管理器,进入你的DedeCMS网站根目录。
    • 找到并打开 /include/arc.listview.class.php 文件。
  2. 修改查询逻辑

    • 在文件中搜索 $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的文章。
  3. 更新缓存

    和方法一一样,登录后台,执行【生成】操作,更新栏目和文档HTML。

⚠️ 方法二的缺点:

  • 全局影响:这会改变整个系统的行为,你可能不希望所有顶级栏目都这样。
  • 升级风险:当你升级DedeCMS版本时,这个被修改的文件会被新版本覆盖,导致设置失效,需要重新修改。
  • 维护困难:如果网站由多人维护,其他人可能不知道这个核心文件的修改,容易造成混淆。

特性 方法一 (修改模板) 方法二 (修改核心文件)
推荐度 ⭐⭐⭐⭐⭐ (强烈推荐) ⭐ (不推荐)
灵活性 :可以针对每个顶级栏目单独设置。 :全局生效,无法单独控制。
安全性 :不修改核心文件,不影响系统升级。 :修改核心文件,升级后失效,有风险。
适用场景 绝大多数情况,特别是不同栏目有不同需求时。 所有顶级栏目都需要统一行为,且不打算升级系统。

对于99%的需求,请使用方法一,它简单、安全、且最符合DedeCMS的模板化设计理念。

-- 展开阅读全文 --
头像
火车头为何无法获取dede图集列表?
« 上一篇 2025-12-22
织梦dedecms5.7插件怎么安装使用?
下一篇 » 2025-12-22

相关文章

取消
微信二维码
支付宝二维码