织梦5.7如何获取当前栏目ID?

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

使用全局变量 $typename (最简单,适用于列表页和内容页)

这是最直接的方法,适用于大多数情况,尤其是在列表页内容页

适用场景:

  • 栏目列表页 (/plus/list.php?tid=XX)
  • (/plus/view.php?aid=XX)

核心变量: 在栏目列表页和文章内容页,织梦会自动将当前栏目的名称赋值给全局变量 $typename

代码示例: 在模板文件(如 list_article.htmarticle_article.htm)中,你可以直接使用:

<h1>当前栏目名称是:{dede:field.typename/}</h1>

或者使用PHP代码:

<?php
    // 在PHP代码块中,可以直接使用 $typename 变量
    echo "<h1>当前栏目名称是:".$typename."</h1>";
?>

使用 {dede:field} 标签 (适用于内容页)

页,你可以使用 {dede:field} 标签的 typeid 属性来获取当前栏目的ID,然后再通过这个ID获取其他信息。

适用场景:

  • (/plus/view.php?aid=XX)

核心标签:

  • {dede:fieldtypeid/}: 获取当前栏目的ID。
  • {dede:typetypeid='栏目ID' function='GetInfos(@me,栏目ID)'/}: 这是一个强大的自定义函数,用于根据栏目ID获取该栏目的任意信息。

代码示例: 假设你想在文章内容页获取当前栏目的“栏目描述”。

<h2>当前栏目名称:{dede:field.typename/}</h2>
<p>栏目描述:{dede:typetypeid='[field:typeid/]' function='GetInfos(@me, "description")'/}</p>

代码解释:

  1. {dede:fieldtypeid/}: 先获取当前文章所在栏目的ID,5
  2. [field:typeid/]: 这是 {dede:typetypeid=} 标签内部的一个占位符,它会替换为上一步获取到的ID值。
  3. function='GetInfos(@me, "description")': 这是核心。
    • @me: 代表当前标签的值,在这里就是栏目ID 5
    • "description": 是你想要获取的字段名,这里是“栏目描述”,你也可以换成 typename (栏目名), seotitle (SEO标题), keywords (关键词) 等。
    • GetInfos: 这是织梦内置的一个函数,用于查询 dede_arctype 表(栏目表)中的信息。

使用 GetOneTypeUrl() 函数 (获取栏目链接)

如果你想在模板中获取当前栏目的完整链接地址,这个函数非常有用。

适用场景:

  • 栏目列表页

核心函数: GetOneTypeUrl($typeid)

  • $typeid: 栏目的ID。

代码示例: 在模板中,你可以这样使用:

<!-- 使用PHP代码块 -->
<a href="<?php echo GetOneTypeUrl($typeid); ?>">返回 <?php echo $typename; ?> 栏目</a>
<!-- 或者,在列表页,可以直接用[field:id]获取ID -->
<a href="{dede:fieldtypeid function='GetOneTypeUrl(@me)'/}">返回 {dede:field.typename/} 栏目</a>

代码解释:

  • $typeid: 在列表页和内容页,这个全局变量同样存在,代表当前栏目的ID。
  • GetOneTypeUrl($typeid): 函数会根据栏目ID,自动判断该栏目是最终列表栏目还是频道封面,并返回正确的URL地址。

在PHP文件中获取 (适用于自定义PHP页面)

如果你在自定义的PHP页面(index.php)中需要获取栏目信息,你需要手动查询数据库。

适用场景:

  • 自定义的首页或PHP页面。
  • 需要通过程序逻辑判断时。

核心代码: 你需要引入织梦的核心文件,然后使用 global $dsql; 来获取数据库连接对象,并进行查询。

代码示例: 假设你的URL是 yourdomain.com/index.php?tid=5,你想获取栏目ID为5的信息。

<?php
require_once (dirname(__FILE__) . "/include/common.inc.php"); // 引入织梦核心文件
// 1. 从GET或POST参数中获取栏目ID
$tid = isset($_GET['tid']) ? intval($_GET['tid']) : 0;
if ($tid > 0) {
    // 2. 执行SQL查询
    $sql = "SELECT * FROM `#@__arctype` WHERE id = $tid";
    $row = $dsql->GetOne($sql);
    if (is_array($row)) {
        // 3. 使用查询结果
        echo "<h1>栏目名称:" . $row['typename'] . "</h1>";
        echo "<p>栏目描述:" . $row['description'] . "</p>";
        echo "<p>SEO标题:" . $row['seotitle'] . "</p>";
        // 你也可以使用方法三的函数来获取链接
        $typeurl = GetOneTypeUrl($row['id']);
        echo "<p>栏目链接:<a href='" . $typeurl . "'>" . $typeurl . "</a></p>";
    } else {
        echo "未找到ID为 $tid 的栏目。";
    }
} else {
    echo "请提供有效的栏目ID (tid)。";
}
?>

总结与对比

方法 适用场景 核心代码/标签 优点 缺点
方法一 列表页、内容页 {dede:field.typename/} 最简单,直接获取栏目名 只能获取栏目名,无法获取其他信息
方法二 内容页 {dede:typetypeid='[field:id/]' function='...'} 非常灵活,可获取栏目任意字段 稍微复杂,需要理解函数用法
方法三 列表页、内容页、PHP GetOneTypeUrl($typeid) 专业,能智能获取栏目链接 仅用于获取URL
方法四 自定义PHP页面 $dsql->GetOne("SELECT ...") 最强大,完全可控,可用于复杂逻辑 需要写SQL,仅限PHP文件中使用

推荐使用顺序:

  1. 只需要栏目名? -> 方法一 ({dede:field.typename/})。
  2. 页需要其他栏目信息? -> 方法二 ({dede:typetypeid=...})。
  3. 需要获取栏目链接? -> 方法三 (GetOneTypeUrl())。
  4. 在非模板的PHP文件中操作? -> 方法四 (手动查询数据库)。

希望这些方法能帮助你顺利解决问题!

-- 展开阅读全文 --
头像
织梦模板FTP上传步骤是怎样的?
« 上一篇 02-03
dede channel调用怎么写?参数用法有哪些?
下一篇 » 02-03

相关文章

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

目录[+]