dede获取顶级id

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

在模板中获取当前栏目的顶级ID

这是最常见的需求,通常用于高亮顶级栏目导航、面包屑导航等。

dede获取顶级id
(图片来源网络,侵删)

方法1:使用顶级栏目ID标签(最简单直接)

DedeCMS有一个专门的标签 {dede:field.typedir /},但它返回的是路径,更常用的是通过获取当前栏目的顶级ID。

在DedeCMS V5.7及更高版本中,可以直接使用以下标签:

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

解释:

  • {dede:field.typeid}:获取当前栏目的ID。
  • function="GetTopid(@me)":这是一个自定义函数。@me 代表 field.typeid 的值(即当前栏目ID)。GetTopid() 函数会根据这个ID,向上查找并返回顶级栏目的ID。

示例: 假设当前栏目ID是 15,它属于一个ID为 5 的顶级栏目。{dede:field.typeid function="GetTopid(@me)"} 输出的结果就是 5

dede获取顶级id
(图片来源网络,侵删)

方法2:使用 channel 标签配合 typeid 属性

如果你想在循环中获取顶级ID,可以使用 channel 标签的 typeid 属性。

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

这个例子是获取所有顶级栏目,如果你想在某个特定栏目下获取其顶级ID,可以这样结合:

{dede:field name='typeid' runphp='yes'}
    $topid = GetTopid(@me);
    @me = $topid;
{/dede:field}

这段代码和第一种方法效果类似,但更灵活地结合了PHP。


在PHP代码中获取顶级栏目ID

如果你在自定义的PHP文件、模块或函数中需要获取顶级ID,可以直接调用DedeCMS的函数。

核心函数:GetTopid()

这个函数是获取顶级ID的关键,它的定义在 /include/common.func.php 文件中。

函数签名: GetTopid($typeid)

参数:

  • $typeid:当前栏目的ID(整数)。

返回值:

  • 返回顶级栏目的ID(整数)。

使用示例:

<?php
// 引入DedeCMS的核心文件
// 通常在织梦的框架下,这个环境变量已经存在
// 如果是独立脚本,需要手动引入
// require_once(dirname(__FILE__).'/../include/common.inc.php');
// 假设当前栏目ID是 25
$currentTypeId = 25;
// 调用函数获取顶级ID
$topTypeId = GetTopid($currentTypeId);
// 输出结果
echo "当前栏目ID: " . $currentTypeId . "<br>";
echo "顶级栏目ID: " . $topTypeId; // 输出顶级栏目的ID
?>

(文章)的顶级栏目ID

这个需求也很常见,比如在文章详情页,你想知道这篇文章所属的顶级栏目是什么,以便调用该顶级栏目下的其他文章。

方法1:在文章详情页模板中

模板(article_article.htm)中,你可以通过文章的栏目ID,再调用 GetTopid 函数来实现。

{dede:field name='typeid' runphp='yes'}
    // @me 是当前文章的栏目ID
    $topid = GetTopid(@me);
    @me = $topid; // 将函数返回值赋给 @me
{/dede:field}

这样,你就可以在模板中像使用普通字段一样使用这个顶级ID了,

当前文章所属的顶级栏目ID是:{dede:field.name='typeid' runphp='yes'}$topid = GetTopid(@me);@me = $topid;{/dede:field}

方法2:在PHP代码中(例如自定义函数或修改PHP文件)

逻辑和场景二完全一样,只是 $typeid 的来源不同,你需要先获取到当前文章的栏目ID,然后再调用 GetTopid()

<?php
// 假设你通过某种方式获取到了当前文章的栏目ID
// 从数据库查询得到,或者从URL参数获取
$currentTypeId = 30; // 假设文章属于ID为30的栏目
// 调用函数获取顶级ID
$topTypeId = GetTopid($currentTypeId);
// 现在你就可以使用 $topTypeId 了
echo "文章所属的顶级栏目ID是: " . $topTypeId;
?>

总结与注意事项

场景 推荐方法 代码/标签示例
模板中获取当前栏目顶级ID 使用 GetTopid 函数 {dede:field.typeid function="GetTopid(@me)"}
PHP代码中获取任意栏目顶级ID 调用 GetTopid($typeid) 函数 $topid = GetTopid(15);
文章详情页获取顶级栏目ID 先获取文章栏目ID,再用 GetTopid {dede:field.name='typeid' runphp='yes'}$topid = GetTopid(@me);@me = $topid;{/dede:field}

重要提示:

  1. 函数位置GetTopid() 函数位于 /include/common.func.php,如果你的主题或插件修改了此文件,可能会导致函数不可用,请确保该文件存在且未被破坏。
  2. 栏目结构GetTopid() 函数的逻辑是“向上查找父级,直到父级ID为0”,如果你的栏目结构非常复杂(例如多层嵌套),它依然能正确工作。
  3. 栏目类型:此方法仅适用于栏目,如果你想获取单页文档的顶级ID,逻辑会略有不同,因为单页文档本身就是一个栏目,但通常单页文档本身就是顶级,所以它的顶级ID就是它自己。
  4. 版本兼容性GetTopid() 是一个非常核心和基础的函数,在DedeCMS的各个主流版本中都存在且功能一致,兼容性很好。

希望这个详细的解答能帮到你!

-- 展开阅读全文 --
头像
织梦后台菜单无响应,如何解决?
« 上一篇 昨天
织梦搜索关键词如何调用?
下一篇 » 昨天

相关文章

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

目录[+]