dede如何调用父栏目名称?

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

使用 typeidtopid 属性(最推荐,最常用)

这是最直接、最简单的方法,适用于绝大多数情况,你只需要在标签中指定当前栏目的ID(typeid),并告诉Dede你要获取它的顶级父栏目(topid='1')。

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

场景:在当前栏目页(如 /category/5/页,调用其顶级父栏目的名称。

标签代码:

{dede:type typeid='5' topid='1'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:type}

代码解析:

  • {dede:type}:这是调用栏目信息的标签。
  • typeid='5'这是关键,你需要填写当前栏目的ID,如果你在ID为5的栏目页,这里就写5,如果你在内容页,通常可以用typeid变量,即typeid='{typeid}'
  • topid='1'这是另一个关键,这个属性告诉Dede,不要获取ID为5的栏目本身,而是要获取它的顶级父栏目。'1'在这里是占位符,表示“顶级”,而不是ID为1的栏目,所以无论它有多少级父栏目,都能找到最顶层的那个。
  • [field:typelink/]:获取该栏目的链接地址。
  • [field:typename/]:获取该栏目的名称。

示例(在栏目页模板 list_article.htm 中):

假设当前栏目是“科技”下的“手机”,层级是“首页 > 科技 > 手机”,你想在“手机”栏目页显示“科技”作为父栏目。

<h1>当前栏目:{dede:field name='typename'/}</h1>
<p>父栏目是:
    {dede:type typeid='{typeid}'}
        <a href="[field:typelink/]">[field:typename/]</a>
    {/dede:type}
</p>

这里的 typeid='{typeid}' 会自动获取当前页面的栏目ID。


使用 GetTopTypename 自定义函数(灵活,需修改文件)

如果你不想在模板里写 typeid,或者想创建一个更简洁的标签来直接获取顶级栏目名,可以通过修改 include/common.func.php 文件来实现一个自定义函数。

步骤:

  1. 打开文件:用FTP或文件管理器打开 /include/common.func.php 文件。

  2. 添加函数:在文件末尾 ?> 之前,添加以下代码:

    /**
     * 获取指定栏目的顶级栏目名称
     * @param int $typeid 当前栏目ID
     * @return string 顶级栏目名称
     */
    function GetTopTypename($typeid)
    {
        if (empty($typeid)) {
            return '';
        }
        // 获取当前栏目信息
        $row = $GLOBALS['dsql']->GetOne("SELECT * FROM `#@__arctype` WHERE id = '$typeid'");
        if (empty($row)) {
            return '';
        }
        // 如果顶级栏目ID为0,说明它本身就是顶级栏目
        if ($row['topid'] == 0) {
            return $row['typename'];
        }
        // 否则,递归查找顶级栏目
        $topid = $row['topid'];
        $topRow = $GLOBALS['dsql']->GetOne("SELECT typename FROM `#@__arctype` WHERE id = '$topid'");
        return $topRow['typename'];
    }
  3. 保存文件

使用方法:

现在你可以在任何模板文件中直接调用这个函数了。

<h2>顶级父栏目是:{dede:GetTopTypename typeid='{typeid}'}</h2>

优点

  • 代码更简洁,语义更清晰。
  • 不需要每次都写 {dede:type} 标签对。

缺点

  • 需要修改核心文件,升级DedeCMS时可能需要重新修改。

页调用父栏目名称

页(article_article.htm)中调用父栏目名称也很常见,逻辑和方法一类似,只是获取当前栏目ID的方式不同。

场景:在文章详情页,显示这篇文章所属栏目的父栏目名称。

标签代码:

{dede:type typeid='{typeid}' topid='1'}
    <span>栏目分类:<a href="[field:typelink/]">[field:typename/]</a></span>
{/dede:type}

代码解析:页中,{typeid} 这个全局变量会自动获取当前文章所属栏目的ID。

  • typeid='{typeid}' 会正确地指向文章的栏目。
  • topid='1' 同样会获取这个栏目的顶级父栏目。

调用直接父栏目名称(非顶级)

如果你不想获取顶级父栏目,而是想获取它的直接上级栏目名称,可以省略 topid 属性。

场景:栏目层级为“首页 > 科技 > 手机”,在“手机”栏目页,想获取“科技”作为父栏目。

标签代码:

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

代码解析:

  • {dede:type} 标签没有 topid 属性时,它默认返回的就是 typeid 所指定栏目的直接父栏目信息。
  • 如果ID为5的栏目已经是顶级栏目(topid=0),那么这个标签会返回它自身的信息。

总结与选择

场景 推荐方法 代码示例
在栏目页/内容页获取顶级父栏目 方法一 {dede:type typeid='{typeid}' topid='1'}[field:typename]{/dede:type}
想创建一个更简洁的标签,多处复用 方法二 修改common.func.php后使用 {dede:GetTopTypename typeid='{typeid}'}
在栏目页获取直接父栏目 方法四 {dede:type typeid='{typeid}'}[field:typename]{/dede:type}

对于大多数用户来说,方法一 是最通用、最安全、最推荐的方式,它不修改任何核心文件,仅通过模板标签就能实现需求,兼容性最好。

-- 展开阅读全文 --
头像
dede当前文章id是什么?如何获取?
« 上一篇 今天
dede缩略图尺寸如何自定义设置?
下一篇 » 今天

相关文章

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

目录[+]