dede如何调用一二级栏目名称?

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

使用 {dede:channel} 标签(最常用、最灵活)

这是最推荐的方法,因为它功能强大,可以灵活地控制一二级栏目的显示层级和样式。

dede调用一二级栏目名称
(图片来源网络,侵删)

调用当前栏目的顶级栏目(一级栏目名称)

这个需求通常用在面包屑导航或者页面标题中,显示当前栏目属于哪个一级栏目。

使用场景:在列表页或内容页,获取当前栏目的“父级”或“顶级”栏目名称。

核心标签{dede:field name='typename' /}{dede:field name='topid' /}

  • {dede:field name='typename' /}:获取当前栏目的名称。
  • {dede:field name='topid' /}:获取当前栏目的顶级栏目ID。

示例代码(在列表页 list_article.htm 或内容页 article_article.htm 中):

dede调用一二级栏目名称
(图片来源网络,侵删)

假设当前栏目是“科技”下的“手机”,顶级栏目是“科技”。

<h1>当前一级栏目是:<strong>{dede:field name='typename' /}</strong></h1>

这段代码会直接输出“手机”,如果想输出它的一级栏目“科技”,我们需要用到 {dede:channel}

正确获取一级栏目名称的方法:

{dede:channel type='top' typeid=''}
    <a href="[field:typelink/]">[field:typename/]</a>
    {dede:son}
        <!-- 这里可以循环输出二级栏目 -->
        <a href="[field:typelink/]">[field:typename/]</a>
    {/dede:son}
{/dede:channel}

上面的代码会输出所有一级栏目,如果我们只想输出当前栏目的那一项,可以这样:

{dede:channel type='top' row='1' currentid='[field:id]'}
    当前一级栏目是:<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

更简洁的方案(适用于已知顶级栏目ID):

如果你知道当前顶级栏目ID,可以直接调用:

{dede:channel typeid='1'} <!-- 将 '1' 替换为你的顶级栏目ID -->
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

调用一级栏目及其下的所有二级栏目(典型的二级导航)

这是最常见的二级菜单需求,比如网站的顶部导航栏。

使用场景:在网站头部,显示所有一级栏目,并在鼠标悬停时显示其下的所有二级栏目。

核心标签{dede:channel type='top'}{dede:son}

  • type='top':表示只调用顶级栏目(一级栏目)。
  • {dede:son}:在 {dede:channel} 循环内部使用,用于输出当前一级栏目下的所有子栏目(二级栏目)。

示例代码(通常放在 head.htm 或其他公共模板文件中):

<ul class="nav">
    {dede:channel type='top' row='8'}
        <li>
            <a href="[field:typelink/]">[field:typename/]</a>
            <!-- 检查当前一级栏目下是否有子栏目,有则显示下拉菜单 -->
            {dede:son}
                <div class="sub-nav">
                    <ul>
                        {dede:field name='sonlist'/}
                        <!-- 或者手动循环,更灵活 -->
                        <!-- {dede:son}
                            <li><a href="[field:typelink/]">[field:typename/]</a></li>
                        {/dede:son} -->
                    </ul>
                </div>
            {/dede:son}
        </li>
    {/dede:channel}
</ul>

代码解释:

  1. {dede:channel type='top'} 会循环遍历所有一级栏目。
  2. [field:typelink/][field:typename/] 分别输出当前一级栏目的链接和名称。
  3. {dede:son} 会判断当前循环的一级栏目是否有子栏目,如果有,则执行内部的代码。
  4. {dede:field name='sonlist'/} 是一个快捷方式,会直接输出一个包含所有子栏目的 <ul> 列表,如果你想自定义样式,使用手动循环的方式(注释掉的部分)会更灵活。

使用 {dede:sql} 标签(直接查询数据库)

当你需要非常复杂的查询,或者 {dede:channel} 标签无法满足需求时,可以直接使用原生 SQL 语句来查询。

使用场景:调用特定条件的栏目,或者获取栏目的一些额外信息。

核心标签{dede:sql sql=''}

  • sql='':里面填写你的 SQL 查询语句。

示例1:获取所有一级栏目名称

{dede:sql sql="SELECT id,typename,typedir FROM `#@__arctype` WHERE reid=0 ORDER BY sortrank"}
    <a href="[field:typedir function='str_replace("{cmspath}", "", "@me")'/]">[field:typename/]</a>
{/dede:sql}
  • reid=0 是判断是否为顶级栏目的关键条件。
  • str_replace("{cmspath}", "", "@me") 是一个函数,用来替换掉栏目路径中的 {cmspath} 变量,得到正确的URL。

示例2:获取指定一级栏目下的所有二级栏目名称

假设一级栏目“科技”的 ID 是 1。

{dede:sql sql="SELECT id,typename,typedir FROM `#@__arctype` WHERE reid=1 ORDER BY sortrank"}
    <a href="[field:typedir function='str_replace("{cmspath}", "", "@me")'/]">[field:typename/]</a>
{/dede:sql}

页调用当前栏目路径

这个需求通常用在文章内容页,显示文章所在的完整栏目路径(面包屑)。

使用场景:在 article_article.htm 中显示“首页 > 科技 > 手机 > 文章标题”。

核心标签{dede:field name='position' /}

示例代码:

<div class="breadcrumb">
    {dede:field name='position' /}
</div>

输出结果: <a href='http://yourdomain.com/'>首页</a> > <a href='http://yourdomain.com/tech/'>科技</a> > <a href='http://yourdomain.com/tech/mobile/'>手机</a> > 文章标题

如果你想自定义分隔符或者去掉最后一项(文章标题),可以使用下面的方法:

{dede:field name='typelink' /}

这个标签只输出“科技 > 手机”路径,不包含文章标题。


总结与对比

方法 适用场景 优点 缺点
{dede:channel} 最常用,调用一级、二级栏目,制作导航菜单。 灵活、强大、官方推荐,支持多种参数和嵌套(如 {dede:son})。 需要理解其参数和嵌套逻辑。
{dede:sql} 复杂查询、{dede:channel} 无法满足时。 灵活性极高,可以获取任何数据库信息。 需要懂 SQL 语句,有安全风险(需注意防注入)。
{dede:field} 内容页/列表页,获取当前栏目信息、顶级栏目ID、面包屑路径。 简洁、高效,专为当前页面数据设计。 只能获取与当前栏目相关的信息,不能跨栏目调用。

对于绝大多数情况,优先使用 {dede:channel},它能解决 99% 的栏目调用需求,只有在特殊情况下,才考虑使用 {dede:sql}

-- 展开阅读全文 --
头像
织梦CMS本地建站教程怎么用?
« 上一篇 昨天
编译器构造c语言描述 pdf
下一篇 » 昨天
取消
微信二维码
支付宝二维码