dede如何调用子栏目的内容?

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

仅调用子栏目列表(最常用)

这是最基础的需求,通常用于网站的侧边栏或主导航的下拉菜单中,只显示子栏目的名称和链接。

方法 1:使用 {dede:channel}

{dede:channel} 是 DedeCMS 最核心的栏目调用标签之一,通过设置其属性,可以精确地获取指定层级的栏目。

标签代码:

{dede:channel type='son' currentstyle='
    <li><a href='~typelink~' class='thisclass'>~typename~</a></li>
    '}
    <li><a href='[field:typelink/]'>[field:typename/]</a></li>
{/dede:channel}

代码解析:

  • {dede:channel type='son' ...}: 这是关键部分。
    • type='son': 核心属性,表示调用当前栏目的直接子栏目,这个标签通常放在一个父栏目模板(如 list_article.htm)中使用。
    • currentstyle='...': 可选属性,用于定义当前所在栏目的样式,当用户正在访问这个子栏目时,会使用 currentstyle 里的代码替换默认的 <li> 代码。~typelink~~typename~ 会被替换为对应的链接和名称。
  • [field:typelink/]: 单个栏目循环体内的变量,表示该栏目的链接地址。
  • [field:typename/]: 单个栏目循环体内的变量,表示该栏目的名称。

使用场景示例: 假设你在 about/ 公司简介这个父栏目下,你想在侧边栏列出所有子栏目(如“发展历程”、“企业文化”、“联系我们”),你只需要将这段代码放在 about/ 目录下的列表模板文件(如 list_about.htm)的侧边栏位置即可。


方法 2:使用 {dede:sql} 标签(更灵活)

type='son' 无法满足你的需求时(你想调用指定ID的子栏目,而不是当前栏目的子栏目),可以使用 SQL 查询。

标签代码:

{dede:sql sql='Select id,typename,typedir From `dede_arctype` where reid=~reid~ ORDER BY sortrank'}
    <li><a href='[field:typedir/]'>[field:typename/]</a></li>
{/dede:sql}

代码解析:

  • sql='...': 这里写 SQL 查询语句。
    • dede_arctype: DedeCMS 存储栏目的数据表。
    • reid: 栏目表中的字段,表示“父栏目ID”,当前栏目的父栏目ID可以通过 ~reid~ 变量获取。
    • ORDER BY sortrank: 按照后台设置的排序进行排序。
  • [field:typedir/][field:typename/]: 与 {dede:channel} 中的用法相同,用于获取栏目的目录和名称。

调用子栏目及其下的最新文章

这个需求也非常普遍,例如在首页或某个频道页,展示每个子栏目,并在每个子栏目名称下列出其最新的几篇文章。

实现这个效果,需要嵌套使用 {dede:channel}{dede:arclist}

标签代码:

{dede:channel type='son' noself='yes'}
    <dl>
        <dt><a href="[field:typelink/]">[field:typename/]</a></dt>
        <dd>
            {dede:arclist titlelen='30' row='5'}
            <a href="[field:arcurl/]">[field:title/]</a>
            {/dede:arclist}
        </dd>
    </dl>
{/dede:channel}

代码解析:

  1. 外层循环 {dede:channel type='son'}:

    • 这个循环会遍历当前父栏目的所有子栏目。
    • 对于每一个子栏目,它会执行一次内层的代码。
  2. 内层循环 {dede:arclist ...}:

    • 这个标签用于调用文章列表。
    • 关键点{dede:arclist}{dede:channel} 循环内部使用时,会自动获取当前子栏目的 ID,从而只调用该子栏目下的文章,这是 DedeCMS 标签嵌套的一个强大特性。
    • titlelen='30': 限制文章标题的长度为30个字符。
    • row='5': 调用最新的5篇文章。
  3. HTML 结构:

    • <dl>, <dt>, <dd> 是为了清晰地展示“栏目-文章”的结构,你可以根据自己网站的 CSS 样式进行修改。

调用指定ID的子栏目

有时候你可能不想调用当前栏目的子栏目,而是想调用一个固定ID(比如ID为5的栏目)的子栏目。

方法:使用 {dede:channel}typeid 属性

{dede:channel typeid='5' type='son'}
    <li><a href='[field:typelink/]'>[field:typename/]</a></li>
{/dede:channel}

代码解析:

  • typeid='5': 这个属性指定了要查询的父栏目的ID。type='son' 则表示查询这个ID栏目的所有子栏目。
  • 你可以将 5 替换成任何你想要调用的父栏目的ID。

总结与注意事项

需求场景 推荐标签 关键属性/代码 说明
调用当前栏目的子栏目列表 {dede:channel} type='son' 最常用,用于模板中。
调用指定ID的子栏目列表 {dede:channel} typeid='5' type='son' 用于固定位置调用。
调用子栏目及其最新文章 {dede:channel} + {dede:arclist} 嵌套使用,arclist 自动获取子栏目ID 非常实用的组合,用于频道页。
复杂的子栏目查询 {dede:sql} sql='Select ... where reid=~reid~' channel 标签无法满足时使用。

重要注意事项:

  1. 模板位置type='son' 必须放在父栏目模板(如 list_xxx.htm)中才能生效,如果你把它放在首页模板(index.htm)里,它会调用首页所在栏目(通常是ID为1的“首页”)的子栏目。
  2. 栏目缓存:DedeCMS 有栏目缓存,如果你修改了栏目或添加了新子栏目,但前台没有显示,请进入后台 -> 系统 -> 一键更新网站 -> 更新栏目缓存,然后再更新HTML。
  3. 变量作用域:在 {dede:channel} 循环内部,[field:typename/] 代表的是子栏目的名称,在循环外部,它可能代表的是父栏目的名称,请注意区分。

希望这些详细的解释和示例能帮助你完美地在 DedeCMS 中调用子栏目内容!

-- 展开阅读全文 --
头像
dede 4级导航如何正确显示?
« 上一篇 今天
如何准确判断程序是否为dede系统?
下一篇 » 今天
取消
微信二维码
支付宝二维码