dede如何获取当前栏目id?

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

在 DedeCMS (织梦CMS) 中,获取当前栏目的 ID 是一个非常常见的需求,主要有两种场景:在列表页/内容页获取当前栏目ID在PHP代码中获取栏目ID

dede 获取当前栏目id
(图片来源网络,侵删)

下面我将为你详细介绍这两种情况下的方法。


在模板文件中使用 (列表页、内容页、封面页)

这是最常见的情况,你需要在 article_list.htm (列表页), article_article.htm (内容页), 或 index.htm (封面页) 等模板文件中获取当前栏目的ID。

DedeCMS 提供了非常方便的全局变量 {dede:fieldtypeid/} 来实现这一点。

在列表页 (article_list.htm) 获取

在列表页模板中,直接使用 {dede:fieldtypeid/} 即可获取当前列表页所对应的栏目ID。

dede 获取当前栏目id
(图片来源网络,侵删)

示例: 在列表页的某个位置显示当前栏目ID,通常用于JS交互或判断。

<p>当前栏目ID是: {dede:fieldtypeid/}</p>
<!-- 常见应用:根据栏目ID调用不同的样式或JS -->
{dede:fieldtypeid runphp='yes'}
    $typeid = @me;
    if($typeid == 5) {
        @me = "<script>alert('这是产品栏目!');</script>";
    } else {
        @me = "";
    }
{/dede:fieldtypeid}

页 (article_article.htm) 获取

页,使用 {dede:fieldtypeid/} 可以获取这篇文章所属的栏目ID。

示例: 在文章页获取当前栏目ID,并用于调用相关文章或其他逻辑。

<p>这篇文章所在的栏目ID是: {dede:fieldtypeid/}</p>
<!-- 常见应用:调用同栏目的热门文章 -->
{dede:arclist typeid='{dede:fieldtypeid/}' titlelen='40' row='5'}
    <li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}

在封面页 (index.htm) 获取

在栏目封面页(首页是特殊的封面页),使用 {dede:fieldtypeid/} 同样可以获取当前封面页对应的栏目ID。

示例: 在栏目封面页获取ID,用于调用该栏目的子栏目或文章列表。

<p>当前封面页的栏目ID是: {dede:fieldtypeid/}</p>

在PHP文件/函数中获取

如果你在自定义的PHP函数、文件或插件中需要获取当前栏目ID,你不能直接使用模板标签,你需要通过DedeCMS的全局对象 $GLOBALSglobal 关键字来获取。

核心变量是 $GLOBALS['typeid']

在PHP函数中获取

如果你在自定义的函数里需要用到当前栏目ID,你需要先声明 global $typeid;

示例: 创建一个自定义函数,并获取当前栏目ID。

function get_current_typeid() {
    // 声明全局变量,这是关键!
    global $typeid;
    // 现在你可以使用 $typeid 这个变量了
    if ($typeid) {
        echo "在PHP函数中获取到的当前栏目ID是: " . $typeid;
    } else {
        echo "当前页面没有栏目ID。";
    }
}
// 调用这个函数
get_current_typeid();

在PHP文件中获取

如果你在一个PHP文件(plus/myphp.php)中,并且这个文件是在某个栏目下执行的,同样可以使用 $GLOBALS['typeid']

示例:myphp.php 文件中输出当前栏目ID。

<?php
require_once(dirname(__FILE__)."/../include/common.inc.php");
// 通过$GLOBALS数组获取
$current_typeid = $GLOBALS['typeid'];
if ($current_typeid) {
    echo "在PHP文件中获取到的当前栏目ID是: " . $current_typeid;
} else {
    echo "当前页面没有栏目ID。";
}
?>

重要注意事项和常见问题

  1. 作用域

    • {dede:fieldtypeid/} 只在模板文件(.htm)中有效。
    • $GLOBALS['typeid'] 只在由DedeCMS引擎解析的页面中有效(即通过 index.phpdede/ 目录下的文件访问的页面),如果你直接访问一个PHP文件,$GLOBALS['typeid] 通常是空的。
  2. 首页的特殊性

    • 在网站首页 (index.php),{dede:fieldtypeid/}$GLOBALS['typeid'] 的值是 0,这是DedeCMS的设计,首页不属于任何具体栏目,如果你的逻辑需要判断是否为首页,可以检查ID是否为0。
  3. 动态页面与静态页面

    无论是生成静态HTML文件还是动态浏览PHP文件,上述方法都同样有效,因为栏目ID信息在页面解析时就已经被DedeCMS的核心程序加载到全局变量中了。

  4. 嵌套循环

    • 在模板中使用 {dede:arclist}{dede:channel} 等循环标签时,循环体内的 {dede:fieldtypeid/}$GLOBALS['typeid'] 指的是 循环体本身 的栏目ID,而不是外层页面的栏目ID。
    • 示例:在列表页调用另一个栏目的文章,此时循环体内的 typeid 是被调用栏目的ID,而不是列表页本身的ID。

场景 方法 示例
在模板文件中 (列表、内容、封面页) 使用 {dede:fieldtypeid/} <p>ID: {dede:fieldtypeid/}</p>
在PHP代码/函数中 使用 global $typeid;$GLOBALS['typeid'] echo $GLOBALS['typeid'];

根据你的具体使用场景,选择最适合的方法即可,对于绝大多数前端模板的开发,使用 {dede:fieldtypeid/} 就足够了。

-- 展开阅读全文 --
头像
dede如何调用当前栏目下的文章?
« 上一篇 今天
织梦如何实现文章自动更新?
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]