dede父级栏目名称和链接如何获取?

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

页(article_article.htm)中获取父级栏目信息

这是最常见的需求,即在文章页面上显示该文章所属栏目的“父栏目”的名称和链接。

dede父级栏目名称和链接
(图片来源网络,侵删)

获取父级栏目名称

使用 GetTypeid 函数结合 GetOneTypeUrlGetTypeInfo 函数。

代码示例:

{dede:field name='typeid' function="GetTopid(@me)"/}

代码解释:

  1. {dede:field name='typeid'}: 获取当前文章所在的栏目ID。
  2. function="GetTopid(@me)": 这是关键。GetTopid() 是DedeCMS的一个内置函数,它会接收一个栏目ID,然后返回其顶级栏目的ID,如果你的栏目结构是“顶级栏目 > 二级栏目 > 三级栏目”,而文章在三级栏目下,这个函数会返回顶级栏目的ID。

如果你想要获取直接父级栏目ID(而不是顶级栏目),你需要使用自定义函数,请参考下面的【进阶方法】。

dede父级栏目名称和链接
(图片来源网络,侵删)

获取父级栏目链接

在获取到父级栏目ID后,我们可以使用 GetOneTypeUrl 函数来生成它的链接。

代码示例:

{dede:field name='typeid' function="GetOneTypeUrl(GetTopid(@me))"/}

代码解释:

  • GetOneTypeUrl(): 这个函数接收一个栏目ID,并返回该栏目的完整链接地址。
  • GetTopid(@me): 先获取顶级栏目ID,然后将这个ID传递给 GetOneTypeUrl,最终得到顶级栏目的链接。

在列表页(list_*.htm)中获取父级栏目信息

在列表页,当前栏目就是列表本身,所以获取的是当前栏目的父级信息。

dede父级栏目名称和链接
(图片来源网络,侵删)

获取父级栏目名称

在列表页模板中,可以直接使用 {dede:field.typename/} 获取当前栏目名称,要获取父级栏目名称,同样需要用到 GetTopid 函数。

代码示例:

{dede:field.typeid function="GetTopid(@me)"/}

或者,如果你想获取当前栏目的直接父级ID,同样需要自定义函数(见下文)。

获取父级栏目链接

与文章页类似,使用 GetOneTypeUrl 函数。

代码示例:

{dede:field.typeid function="GetOneTypeUrl(GetTopid(@me))"/}

进阶方法:获取“直接父级”而非“顶级”栏目

DedeCMS默认的 GetTopid 函数只能获取顶级栏目,如果你的栏目结构是“顶级 > 父级 > 当前”,而你只想获取“父级”的信息,就需要一个自定义函数。

步骤 1:创建自定义函数文件

  1. 打开你的DedeCMS网站根目录。
  2. 找到并打开 include/common.func.php 文件。
  3. 在文件的末尾(?> 之前)添加以下PHP函数代码:
/**
 * 获取指定栏目的直接父级栏目ID
 * @param int $typeid 当前栏目ID
 * @return int 父级栏目ID
 */
function GetParentID($typeid)
{
    global $dsql;
    $row = $dsql->GetOne("SELECT reid FROM `#@__arctype` WHERE id = $typeid");
    return $row['reid'];
}

代码解释: 这个函数 GetParentID 接收一个栏目ID,然后查询数据库中的 #@__arctype 表,找到该栏目的 reid 字段值。reid 字段存储的就是该栏目的“父级栏目ID”。

步骤 2:在模板中使用自定义函数

现在你可以在任何模板文件中使用这个新函数了。

示例:在文章页获取直接父级栏目的名称和链接

假设文章所在栏目的ID是 10,它的直接父级栏目ID是 5

获取父级栏目名称:

{dede:field.name='typeid' function='GetParentID(@me)'/}

这会输出父级栏目的ID 5,如果你想要名称,需要再套一层 GetTypeInfo

{dede:field.name='typeid' function='GetTypeName(GetParentID(@me))'/}

(注意:GetTypeName 也是一个内置函数,通过ID获取栏目名称)

获取父级栏目链接:

{dede:field.name='typeid' function='GetOneTypeUrl(GetParentID(@me))'/}

综合应用实例

假设你想在文章页面包屑导航中,在“首页 > 当前栏目”之前加上“父栏目”,可以这样写:

article_article.htm 中:

<div class="breadcrumb">
    <a href="{dede:global.cfg_basehost/}">首页</a>
    {dede:field.typeid function="GetParentID(@me) runphp='yes'"}
        if(@me > 0){
            $row = GetOneTypeUrl(@me);
            echo ' > <a href="'.$row.'">'.GetTypeName(@me).'</a>';
        }
    {/dede:field.typeid}
    > <a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
    > <span>{dede:field name='title'/}</span>
</div>

代码解释:

  1. {dede:field.typeid function="GetParentID(@me) runphp='yes'"}: 获取当前文章的直接父级栏目ID,并开启PHP运行。
  2. if(@me > 0): 判断是否存在父级栏目,如果栏目是顶级栏目,@me (即父级ID) 为0,则不显示。
  3. $row = GetOneTypeUrl(@me);: 获取父级栏目的链接。
  4. echo ' > <a href="'.$row.'">'.GetTypeName(@me).'</a>';: 输出面包屑的父级部分,如 > <a href="/parent/">父栏目名称</a>
需求 方法 代码示例
获取顶级栏目ID 使用内置函数 {dede:field.name='typeid' function='GetTopid(@me)'/}
获取顶级栏目链接 组合使用内置函数 {dede:field.name='typeid' function='GetOneTypeUrl(GetTopid(@me))'/}
获取直接父级栏目ID 自定义函数 GetParentID {dede:field.name='typeid' function='GetParentID(@me)'/}
获取直接父级栏目链接 组合自定义和内置函数 {dede:field.name='typeid' function='GetOneTypeUrl(GetParentID(@me))'/}

重要提示:

  • 在修改 include/common.func.php 文件前,务必备份原文件,以防出错。
  • 如果你的网站开启了模板缓存,修改模板或函数文件后,需要到后台的“生成” -> “更新缓存”中刷新缓存才能看到效果。

希望这些详细的解释和示例能帮助你解决问题!

-- 展开阅读全文 --
头像
织梦模板响应式免费,真有这好事吗?
« 上一篇 02-08
dede幼儿园模板下载安全吗?
下一篇 » 02-08

相关文章

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

目录[+]