dede如何获取当前栏目id?

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

使用全局变量 $typeid (最常用、最推荐)

这是获取当前栏目 ID 最直接、最简单的方法,DedeCMS 在处理页面时,会自动将当前栏目的 ID 存储在全局变量 $typeid 中。

适用场景:

  • 在列表页 (list.php)页 (article_article.php 或自定义的文章模板)
  • 在自定义的栏目页面模板中

示例代码:

<?php
// 获取当前栏目ID
$currentTypeId = $typeid;
// 使用 echo 输出
echo "当前栏目ID是:" . $currentTypeId;
// 或者直接使用,例如查询当前栏目下的文章
$dsql = new DedeSql(false);
$sql = "SELECT * FROM `dede_archives` WHERE typeid = '$currentTypeId' ORDER BY id DESC LIMIT 10";
$dsql->SetQuery($sql);
$dsql->Execute();
while ($row = $dsql->GetArray()) {
    echo $row['title'];
}
$dsql->Close();
?>

使用 GetTopid() 函数 (获取顶级栏目ID)

有时候你可能需要获取的是当前栏目所属的顶级栏目的 ID,而不是它本身的 ID,这时可以使用内置的 GetTopid() 函数。

适用场景:

  • 在一个多级栏目(如“新闻” > “国内新闻” > “北京新闻”)的列表页或内容页,但你希望获取顶级栏目“新闻”的 ID。

示例代码:

<?php
// 获取当前栏目的顶级栏目ID
$topTypeId = GetTopid();
echo "当前栏目的顶级栏目ID是:" . $topTypeId;
?>

通过 SQL 查询获取栏目信息 (适用于特定情况)

如果你不仅需要 ID,还需要栏目的其他信息(如栏目名称、栏目别名、描述等),或者你需要在非标准页面(如首页、自定义页面)中获取某个特定栏目的信息,可以通过 SQL 查询来实现。

适用场景:

  • 在首页 (index.php) 调用指定栏目的内容。
  • 需要获取当前栏目的详细信息,而不仅仅是 ID。

示例代码:

<?php
// 1. 获取当前栏目ID (和方法一一样)
$currentTypeId = $typeid;
// 2. 通过ID查询栏目的完整信息
$dsql = new DedeSql(false);
$sql = "SELECT id, typename, typedir, description FROM `dede_arctype` WHERE id = '$currentTypeId'";
$row = $dsql->GetOne($sql);
// 3. 检查查询结果是否为空
if (is_array($row)) {
    echo "栏目ID: " . $row['id'] . "<br>";
    echo "栏目名称: " . $row['typename'] . "<br>";
    echo "栏目目录: " . $row['typedir'] . "<br>";
    echo "栏目描述: " . $row['description'] . "<br>";
} else {
    echo "未找到栏目ID为 " . $currentTypeId . " 的栏目。";
}
$dsql->Close();
?>

在自定义页面中获取栏目ID

如果你创建了一个自定义的页面(my_page.php),并且希望这个页面能根据 URL 中的参数来显示不同栏目的内容,你需要手动获取 URL 中的 ID。

你的 URL 是 http://www.yoursite.com/my_page.php?typeid=5

示例代码 (在 my_page.php 文件中):

<?php
// 获取URL中传递的typeid参数
$currentTypeId = isset($_GET['typeid']) ? (int)$_GET['typeid'] : 0;
if ($currentTypeId > 0) {
    echo "你请求的栏目ID是:" . $currentTypeId;
    // 使用这个ID进行查询
    $dsql = new DedeSql(false);
    $sql = "SELECT * FROM `dede_archives` WHERE typeid = '$currentTypeId' LIMIT 5";
    $dsql->SetQuery($sql);
    $dsql->Execute();
    while ($row = $dsql->GetArray()) {
        echo "<a href='" . $row['arcurl'] . "'>" . $row['title'] . "</a><br>";
    }
    $dsql->Close();
} else {
    echo "请指定一个栏目ID,?typeid=5";
}
?>

总结与最佳实践

方法 函数/变量 适用场景 优点 缺点
方法一 $typeid 列表页、内容页、栏目页 (最常用) 最简单、最直接、效率最高 仅适用于 DedeCMS 已确定上下文的页面
方法二 GetTopid() 需要获取顶级栏目ID 方便快捷,无需手动判断 只能获取顶级ID
方法三 SQL 查询 需要栏目详细信息 灵活,可获取任意栏目数据 代码稍多,需要手动处理SQL
方法四 $_GET['typeid'] 自定义页面,通过URL传参 极其灵活,可自由控制 需要手动验证和过滤参数,安全性需注意

核心建议:

  • 99% 的情况下,直接使用 $typeid 就足够了。 这是最符合 DedeCMS 设计思想的方式。
  • 如果你的网站有复杂的栏目层级,并且需要在子栏目页面调用顶级栏目的模板或数据,请使用 GetTopid()
  • 在自定义 PHP 页面中,务必记得对从 $_GET 获取的 ID 进行类型转换(如 (int))和安全过滤,防止 SQL 注入。
-- 展开阅读全文 --
头像
C语言如何替换字符串中的特定子串?
« 上一篇 02-12
c程序设计语言第2版 pdf哪里能免费下载?
下一篇 » 02-12
取消
微信二维码
支付宝二维码

目录[+]