dede如何读取当前栏目id值?

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

在列表模板(list_*.htm)中获取当前栏目ID

在列表页模板中,你通常需要获取当前正在浏览的栏目的ID,以便用于高亮导航、调用相关内容等。

dede读取栏目id值
(图片来源网络,侵删)

方法1:使用全局变量 $typeid (最常用、最推荐)

这是最直接、最简单的方法,DedeCMS在解析列表页时,已经将当前栏目的ID赋值给了全局变量 $typeid

示例代码:

<p>当前栏目ID是:{ $typeid }</p>

完整示例(在列表页中调用当前栏目的名称):

<h1>{ dede:field name='typename'/ }</h1>
<p>您正在浏览的是栏目ID为 <strong>{ $typeid }</strong> 的列表页。</p>
{ dede:list pagesize='10' }
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:list}

模板(article_*.htm)中获取所属栏目ID

页,你可能需要获取这篇文章所属的栏目的ID。

dede读取栏目id值
(图片来源网络,侵删)

方法1:使用全局变量 $typeid (同样适用)

和列表页类似,在内容页模板中,全局变量 $typeid 也被自动赋值为当前文章所属栏目的ID。

示例代码:

<p>这篇文章所属的栏目ID是:{ $typeid }</p>

方法2:使用 { dede:field }

你也可以使用 { dede:field } 标签来获取,'typeid' 是字段名称。

示例代码:

<p>这篇文章所属的栏目ID是:{ dede:field name='typeid'/ }</p>

完整示例(在内容页调用当前栏目的链接):

<h1>{ dede:field.title/ }</h1>
<!-- 获取当前文章ID -->
<p>文章ID: { dede:field.id/ }</p>
<!-- 获取所属栏目ID (两种方法都可以) -->
<p>栏目ID (方法1): { $typeid }</p>
<p>栏目ID (方法2): { dede:field name='typeid'/ }</p>
<!-- 获取所属栏目名称 -->
<p>栏目名称: { dede:field name='typename'/ }</p>
<!-- 获取所属栏目链接 (非常有用) -->
<p><a href="{ dede:field name='typeurl'/ }">返回 { dede:field.name='typename'/ } 栏目</a></p>
{ dede:field.body/ }

在自定义PHP文件或独立页面中获取栏目ID

当你需要在一个自定义的PHP文件(plus/myphp.php)或者一个独立页面(单页面)中获取栏目ID时,你需要手动从URL参数或全局变量中获取。

方法1:从URL获取(适用于列表页和内容页)

DedeCMS的URL结构通常是 plus/list.php?tid=[栏目ID] 或者 plus/view.php?aid=[文章ID],你可以通过 PHP 的 $_GET 超全局变量来获取。

示例代码 (在自定义PHP文件中):

<?php
require_once(dirname(__FILE__)."/../include/common.inc.php");
// 获取URL中的栏目ID tid
$tid = isset($_GET['tid']) ? intval($_GET['tid']) : 0;
// 获取URL中的文章ID aid
$aid = isset($_GET['aid']) ? intval($_GET['aid']) : 0;
if ($tid > 0) {
    echo "通过URL获取到的栏目ID是:" . $tid;
    // 你可以使用这个ID去查询数据库
    $row = $dsql->GetOne("SELECT * FROM `#@__arctype` WHERE id = $tid");
    if (is_array($row)) {
        echo "<br>栏目名称是:" . $row['typename'];
    }
}
if ($aid > 0) {
    echo "<br>通过URL获取到的文章ID是:" . $aid;
}
?>

方法2:使用全局变量 $typeid (如果上下文正确)

在某些情况下,例如你在一个被DedeCMS框架加载的文件中,全局变量 $typeid 可能已经被设置好了,你可以直接使用,但为了安全,最好先检查它是否存在。

示例代码:

<?php
require_once(dirname(__FILE__)."/../include/common.inc.php");
// 检查全局变量是否存在
if (isset($GLOBALS['typeid'])) {
    $current_typeid = $GLOBALS['typeid'];
    echo "通过全局变量获取到的栏目ID是:" . $current_typeid;
} else {
    echo "无法获取到全局栏目ID变量。";
}
?>

通过已知栏目名称获取栏目ID

有时候你可能不知道栏目ID,但知道栏目名称,想通过名称来获取ID,这时你需要直接查询DedeCMS的数据库。

示例代码:

<?php
require_once(dirname(__FILE__)."/../include/common.inc.php");
$typename = "新闻中心"; // 假设这是你要查询的栏目名
// 使用SQL查询,注意对名称进行转义以防SQL注入
$typename = addslashes($typeid);
$row = $dsql->GetOne("SELECT id FROM `#@__arctype` WHERE typename = '$typename'");
if (is_array($row)) {
    $typeid_from_name = $row['id'];
    echo "通过栏目名称 '$typename' 查询到的栏目ID是:" . $typeid_from_name;
} else {
    echo "未找到名称为 '$typename' 的栏目。";
}
?>

总结与推荐

场景 推荐方法 示例代码
列表页模板 使用全局变量 $typeid { $typeid }
自定义PHP文件 $_GET 超全局变量获取 $tid = isset($_GET['tid']) ? intval($_GET['tid']) : 0;
通过名称查ID 直接查询数据库 #@__arctype $dsql->GetOne("SELECT id FROM#@__arctypeWHERE typename = '$typename'");

核心要点:

  1. 在模板文件中,优先使用 { $typeid },这是最简单高效的方式。
  2. 在PHP代码中,根据上下文决定是从 $_GET 获取还是查询数据库。
  3. 始终进行安全处理:从 $_GET 获取参数时,使用 intval() 函数将其转换为整数,可以有效防止SQL注入和非法参数。

-- 展开阅读全文 --
头像
dede免费酒类模板哪里找?好用吗?
« 上一篇 今天
织梦手机端分页失效怎么办?
下一篇 » 今天

相关文章

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