dede当前id如何正确赋值?

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

当前 ID 是什么?

“当前 ID” 的含义取决于你所在的页面:

dede 当前id赋值
(图片来源网络,侵删)
  1. 在栏目列表页 (如 plus/list.php 或栏目自定义列表模板):当前 ID 是指该栏目本身的 ID,你在“产品介绍”栏目下,那么当前 ID 产品介绍”这个栏目的 ID。
  2. 页 (如 article_article.htm):当前 ID 通常指当前文章的 ID,但如果你想在文章页获取它所属栏目的 ID,则需要使用特定的调用标签。
  3. 在首页或其他静态页面:没有“当前栏目”的概念,因此直接获取 typeid 是没有意义的,通常会返回 0 或空。

使用系统内置标签(推荐,最简单)

这是在 DedeCMS 模板中获取 ID 最直接、最常用的方法。

获取当前栏目的 ID (typeid)

这个标签主要用于栏目列表页,获取当前正在被浏览的栏目的 ID。

标签代码:

{dede:field name='typeid'/}

使用场景示例: 假设你想在列表页的标题旁边显示当前栏目的 ID,可以这样写:

dede 当前id赋值
(图片来源网络,侵删)
<h2>当前栏目ID: {dede:field.name='typeid'/} 的文章列表</h2>
<ul>
    {dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>文章ID: [field:id/]</span>
    </li>
    {/dede:list}
</ul>

获取当前文章的 ID (id)

这个标签主要用于,获取当前正在被阅读的文章的 ID。

标签代码:

{dede:field name='id'/}

使用场景示例:页,你想显示这篇文章的 ID:

<h1>[field:title/]</h1>
<p>文章ID: {dede:field.name='id'/}</p>
<p>发布时间: {dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/}</p>
<div>
    [field:body/]
</div>

使用 PHP 代码(灵活,适用于复杂逻辑)

如果你需要在模板文件(.php 文件)中进行更复杂的判断和处理,可以直接使用 PHP 代码来获取 ID。

在 PHP 文件中获取当前栏目 ID

DedeCMS 的很多页面都是通过 PHP 文件动态生成的,在这些文件中,你可以通过全局变量 $typeid 来获取。

适用文件:

  • plus/list.php (列表页)
  • category.php (栏目首页)
  • 以及其他一些自定义的 PHP 页面

示例代码 (以 plus/list.php 为例):

<?php
require_once(dirname(__FILE__)."/../include/common.inc.php");
// 获取当前栏目ID
$currentTypeId = $typeid;
// 现在你就可以在PHP中使用这个变量了
if ($currentTypeId > 0) {
    // 查询这个栏目的名称
    $query = "SELECT typename FROM `#@__arctype` WHERE id = $currentTypeId";
    $typeRow = $dsql->GetOne($query);
    $typeName = $typeRow['typename'];
    echo "<h2>您正在浏览栏目: " . $typeName . " (ID: " . $currentTypeId . ")</h2>";
}
// ... 后续的列表查询逻辑 ...
$ctag = DedeTagObj::getInstance();
$ctag->SetRefObj('list');
$ctag->SetSource($tid);
$tid = $ctag->GetAtt('typeid');
if ($tid == 0) $tid = $currentTypeId;
// 调用列表
$arcs = GetList($typeid, $tid, 'hot', $PageSize, $isdefault, $ismake, $orderby, $innertext, $tablewidth, $arcid);
// ... 省略后续代码 ...
?>

在 PHP 文件中获取当前文章 ID

这个主要用在文章内容页的 PHP 文件中,view.php

适用文件:

  • view.php (文章内容页)

示例代码 (在 view.php 中):

<?php
require_once(dirname(__FILE__)."/include/common.inc.php");
require_once(DEDEINC."/arc.archives.class.php");
// 获取当前文章ID
$aid = (isset($aid) && is_numeric($aid)) ? $aid : 0;
if ($aid == 0) {
    ShowMsg('文档ID不存在!', '-1');
    exit();
}
// 创建一个文章类的对象
$arc = new Archives($aid);
// 现在你可以通过对象获取文章的各种信息
$arcTitle = $arc->Fields['title'];
$arcTypeId = $arc->Fields['typeid']; // 获取文章所属的栏目ID
$arcPubDate = $arc->Fields['pubdate'];
echo "<h1>文章标题: " . $arcTitle . "</h1>";
echo "<p>文章ID: " . $aid . "</p>";
echo "<p>所属栏目ID: " . $arcTypeId . "</p>";
?>

重要区别:如何在文章页获取所属栏目的 ID?

这是一个非常高频的需求,在文章内容页,{dede:field.name='typeid'} 获取的是文章本身的 ID,而我们通常想要的是它属于哪个栏目

这时,你需要使用 channel 标签的 type 属性。

标签代码:

{dede:field name='typeid' function="GetTopTypename(@me)"/}

或者更精确地获取ID:

{dede:field name='typeid' function="get_channelid(@me)"/}

但更直接和推荐的方法是使用 arclistchannelartlist 标签来获取。

最实用的方法:使用 channelartlist

如果你想在文章页调用当前栏目的信息(比如名称、ID等),最好的方式是使用 channelartlist

示例模板代码 (article_article.htm):

{dede:channelartlist typeid='{dede:field.name=typeid/}'}
    <h2>当前栏目ID: {dede:field.id/}</h2>
    <h3>当前栏目名称: {dede:field.typename/}</h3>
    <!-- 这里是文章内容 -->
    <div>
        <h1>{dede:field.title/}</h1>
        <div>{dede:field.body/}</div>
    </div>
{/dede:channelartlist}

注意: {dede:field.name=typeid/} 在这里的作用是告诉 channelartlist 标签,要获取的文章所属的栏目 ID 是多少。{dede:field.id/} 才是真正获取到的栏目 ID。


总结与最佳实践

场景 需求 推荐方法 代码示例
栏目列表页 获取当前栏目的 ID 使用系统标签 {dede:field.name='typeid'/}
获取当前文章的 ID 使用系统标签 {dede:field.name='id'/}
获取文章所属栏目的 ID 使用 channelartlist {dede:channelartlist...}{dede:field.id/}{/dede:channelartlist}
PHP 文件中 获取当前栏目 ID 使用全局变量 $typeid
PHP 文件中 获取当前文章 ID 使用全局变量 $aid
PHP 文件中 获取文章所属栏目 ID 通过文章类对象 $arc->Fields['typeid']

希望这个详细的解释能帮助你完全理解在 DedeCMS 中如何操作当前 ID!

-- 展开阅读全文 --
头像
dede模板下载哪里找?安全吗?好用吗?
« 上一篇 03-23
C语言for循环嵌套for循环如何正确使用?
下一篇 » 03-23

相关文章

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