dede如何调用指定二级栏目?

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

核心思路

调用指定的二级栏目的核心思路是:先定位到它的“父栏目”,然后在该父栏目下调用它的“子栏目”(也就是二级栏目)

dede调用指定的二级栏目
(图片来源网络,侵删)

关键在于获取到父栏目的ID


使用 {dede:channelartlist} 标签(推荐,最灵活)

这是最推荐的方法,因为它可以非常精确地控制,并且代码结构清晰。{dede:channelartlist} 专门用于调用指定栏目及其子栏目。

适用场景:当您想在页面的某个特定位置,只显示某一个一级栏目下的所有二级栏目时。

步骤

dede调用指定的二级栏目
(图片来源网络,侵删)
  1. 找到父栏目ID:登录DedeCMS后台,进入【栏目管理】,找到您想要调用的二级栏目所属的那个一级栏目,记下它的栏目ID,假设“产品中心”是一级栏目,它的ID是 2

  2. 使用模板标签:在您需要调用栏目的模板文件(通常是 index.htm 或其他自定义页面模板)中,使用以下代码:

{dede:channelartlist typeid='2'}
    <h2>{dede:field name='typename'/}</h2>
    <ul>
        {dede:channel type='son' noself='yes'}
        <li>
            <a href="[field:typelink/]">[field:typename/]</a>
        </li>
        {/dede:channel}
    </ul>
{/dede:channelartlist}

代码详解

  • {dede:channelartlist typeid='2'}:

    dede调用指定的二级栏目
    (图片来源网络,侵删)
    • typeid='2':这是最关键的部分。typeid 指定了要调用的一级栏目的ID,这里我们填写步骤1中找到的ID 2
    • 这个标签会循环输出 typeid 指定的栏目信息。{dede:field name='typename'} 就会输出“产品中心”这个名称。
  • {dede:channel type='son' noself='yes'}:

    • 这个标签被放在 {dede:channelartlist} 内部,它会在当前循环的父栏目(即ID为2的“产品中心”)下查找子栏目。
    • type='son':明确表示只调用子栏目。
    • noself='yes':表示不调用栏目本身(即不显示“产品中心”这个链接),只显示它的子栏目,如果您的二级栏目可能还有三级栏目,并且也想显示,可以去掉这个属性或改为 type='sun'
  • [field:typelink/][field:typename/]

    • [field:typelink/]:输出子栏目的链接地址。
    • [field:typename/]:输出子栏目的名称。

使用 {dede:channel} 标签配合 typeid 属性(最简单)

如果您的需求非常简单,只是想在某个地方列出几个不相关的二级栏目,并且它们的父栏目都已知,可以直接使用 {dede:channel}

适用场景:调用几个不同父栏目下的二级栏目,且它们的ID是已知的。

步骤

  1. 找到所有需要调用的二级栏目的ID,您想调用ID为 5, 6, 7 的这三个二级栏目。

  2. 使用模板标签

<h3>指定栏目列表</h3>
<ul>
    {dede:channel typeid='5,6,7'}
    <li>
        <a href="[field:typelink/]">[field:typename/]</a>
    </li>
    {/dede:channel}
</ul>

代码详解

  • {dede:channel typeid='5,6,7'}:
    • typeid 属性可以直接接受一个栏目ID的列表,用英文逗号 分隔。
    • 这种方法会直接输出这些ID对应的栏目,无论它们是一级、二级还是三级,所以它只适用于您已经确切知道最终要调用的栏目ID的情况。

结合SQL查询(最强大,最灵活)

当需要非常复杂的条件判断时(只调用某个特定模型下的二级栏目),直接在模板中写SQL语句是最强大的方法。

适用场景:需要根据栏目模型、关键字等复杂条件来筛选二级栏目。

步骤

  1. 找到父栏目ID,同方法一,假设父栏目ID为 2

  2. 使用 {dede:sql}:

<h3>通过SQL调用的二级栏目</h3>
<ul>
    {dede:sql sql="SELECT id,typename,typedir FROM `dede_arctype` WHERE reid=2 AND ishidden<>1 ORDER BY sortrank"}
    <li>
        <a href="[field:typedir function='str_replace("{cmspath}","",@me)'/]">[field:typename/]</a>
    </li>
    {/dede:sql}
</ul>

代码详解

  • {dede:sql sql="..."}:

    • sql 属性里是完整的MySQL查询语句。
    • SELECT id,typename,typedir FROM dede_arctype:从栏目表 dede_arctype 中查询 id, typename, typedir 这三个字段。注意:如果你的表前缀不是 dede_,请替换成你自己的表前缀。
    • WHERE reid=2:这是核心条件。reid 字段存储的是“父栏目ID”。reid=2 就表示只查找父栏目ID为2的所有栏目,也就是所有二级栏目。
    • AND ishidden<>1:这是一个常用条件,表示不显示隐藏的栏目。ishidden=1 的栏目在后台设置为“隐藏”。
    • ORDER BY sortrank:按照后台设置的“排序值”进行排序,保证顺序正确。
  • [field:typedir function='str_replace("{cmspath}","",@me)'/]:

    • 从数据库中取出的 typedir 字段会包含 {cmspath} 这样的占位符,需要用 function 属性将其替换成真实的网站路径,才能生成正确的链接。

总结与选择建议

方法 优点 缺点 适用场景
方法一: channelartlist 代码结构清晰,符合DedeCMS逻辑,推荐首选 需要知道父栏目ID 调用某一个父栏目下的所有子栏目,这是最常见的需求。
方法二: channel 代码最简单,直接 需要预先知道所有目标栏目的具体ID 调用几个不相关的、已知的ID的栏目。
方法三: SQL查询 功能最强大,灵活性最高 代码相对复杂,需要了解SQL语句和表结构 需要根据复杂条件(如模型、关键字等)来筛选栏目。

对于绝大多数情况,方法一 是您应该首先选择和使用的方案,它既安全又易于理解和维护。

-- 展开阅读全文 --
头像
如何删除织梦频道模型?
« 上一篇 02-05
C语言中双引号与单引号的区别究竟是什么?
下一篇 » 02-05

相关文章

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