dede如何调用当前栏目的上一级栏目标题?

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

页 (article_article.htm) 调用

这是最常见的情况,比如你在文章详情页,想显示这篇文章所属的栏目(父栏目)的名称。

dede调用上一级标题
(图片来源网络,侵删)

方法 1:使用全局变量 $typename (最简单、最推荐)

页模板中,DedeCMS 已经定义好了当前栏目的全局变量 $typename,这个变量存储的就是当前栏目的名称。

适用情况:

  • 你只想显示当前栏目的名称,也就是这篇文章的直接上级栏目。

代码示例: 在你的 article_article.htm 模板文件中,在需要显示父级标题的地方直接使用:

<p>文章所属栏目:<strong>{dede:field name='typename'/}</strong></p>

或者使用变量:

dede调用上一级标题
(图片来源网络,侵删)
<p>文章所属栏目:<strong><?php echo $typename; ?></strong></p>

这两种写法效果是一样的。


方法 2:使用 GetTopTypename 自定义函数 (显示最顶级栏目)

如果你想在文章页显示这个栏目所属的最顶级栏目的名称,可以使用 DedeCMS 自带的函数 GetTopTypename

适用情况:

  • 你的栏目结构是“顶级栏目 > 二级栏目 > 三级栏目”。
  • 你想在文章页直接显示“顶级栏目”的名称。

代码示例:

<p>文章所属顶级栏目:<strong>{dede:field name='typeid' function='GetTopTypename(@me)'/}</strong></p>

或者:

<p>文章所属顶级栏目:<strong><?php echo GetTopTypename($typeid); ?></strong></p>

这里的 $typeid 是当前文章的栏目 ID。


方法 3:手动查询数据库 (显示任意上级栏目)

如果你的栏目层级很深(比如四级、五级),或者你想显示“父级”栏目而不是“顶级”栏目,而 DedeCMS 又没有提供现成的函数,那么可以手动查询数据库。

适用情况:

  • 栏目层级超过两级。
  • 需要显示直接父级栏目,而不是顶级栏目。

代码示例: 假设你想获取当前栏目的直接父级栏目名称,可以在模板文件中加入 PHP 代码。

<?php
// 获取当前栏目的ID
$TypeID = $typeid;
// 如果当前栏目ID不为0(0表示是顶级栏目)
if($TypeID > 0){
    // 查询当前栏目的信息
    $query = "SELECT typename,reid FROM `#@__arctype` WHERE id = $TypeID";
    $row = $dsql->GetOne($query);
    // 如果父级栏目ID(reid)不为0,则查询父级栏目名称
    if($row['reid'] != 0){
        $ParentID = $row['reid'];
        $parent_query = "SELECT typename FROM `#@__arctype` WHERE id = $ParentID";
        $parent_row = $dsql->GetOne($parent_query);
        $parent_typename = $parent_row['typename'];
    } else {
        $parent_typename = '这是顶级栏目';
    }
}
?>
<p>文章的直接父级栏目是:<strong><?php echo $parent_typename; ?></strong></p>

代码解释:

  1. $typeid 是当前文章的栏目 ID。
  2. 我们查询 #@__arctype 表(栏目表)获取当前栏目的 reid(父级栏目ID)和 typename(当前栏目名)。
  3. reid 不为 0,说明它不是顶级栏目,我们再用 reid 去查询父级栏目的 typename
  4. 最后输出结果。

在列表页 (list_*.htm) 调用

在列表页,情况类似,变量名稍有不同。

方法 1:使用全局变量 $typename

和文章页一样,$typename 在列表页模板中也代表当前栏目的名称。

代码示例:list_x.htm 模板中:

<h2>当前栏目:<strong>{dede:field name='typename'/}</strong></h2>

方法 2:使用 GetTopTypename 函数

同样,可以使用 GetTopTypename 来获取顶级栏目名。

代码示例:

<h2>当前顶级栏目:<strong>{dede:field name='typeid' function='GetTopTypename(@me)'/}</strong></h2>

在首页或其他页面调用

在首页调用,需要通过 arclistchannel 标签来指定栏目,然后获取其父级信息。

方法:结合 channel 标签和 GetTopTypename

假设你想在首页显示“公司新闻”这个栏目的父级栏目名称。

代码示例: 假设“公司新闻”的栏目ID是 5

{dede:channel typeid='5'}
    <p>栏目“[field:typename/]”的顶级栏目是:<strong>{field:typename function='GetTopTypename(@me)'/}</strong></p>
{/dede:channel}

或者,如果你想获取它的直接父级,可以结合 PHP 代码(方法3)来实现,但会更复杂一些,通常首页调用只需要顶级栏目名就足够了。

总结与推荐

场景 需求 推荐方法 代码示例
文章页 显示当前栏目(直接上级) 全局变量 $typename {dede:field.name='typename'/}
文章页 显示最顶级栏目 GetTopTypename 函数 {dede:field.name='typeid' function='GetTopTypename(@me)'/}
文章页 显示任意上级栏目(如父级) 手动查询数据库 见方法3,使用PHP代码查询reid
列表页 显示当前栏目 全局变量 $typename {dede:field.name='typename'/}
列表页 显示最顶级栏目 GetTopTypename 函数 {dede:field.name='typeid' function='GetTopTypename(@me)'/}
首页/其他页 调用指定栏目的上级 channel + GetTopTypename {dede:channel typeid='X'}...{/dede:channel}

核心要点:

  1. $typename 是获取当前栏目名称最简单直接的方式。
  2. GetTopTypename() 是获取顶级栏目名称的利器。
  3. 对于复杂的层级关系,手动查询数据库是最灵活但也是最复杂的方法,需要你对 PHP 和 DedeCMS 数据库结构有一定了解。

对于绝大多数情况,方法1和方法2已经足够解决

-- 展开阅读全文 --
头像
织梦外部链接调用不了
« 上一篇 02-26
notepad如何编辑运行C语言?
下一篇 » 02-26

相关文章

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

目录[+]