dede栏目调用如何获取当前栏目ID?

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

使用 {dede:channel} 标签(最常用)

{dede:channel} 是专门用于调用栏目标签的,获取 ID 是其基本功能。

场景1:获取当前栏目的 ID

在当前栏目页(如列表页 list_article*.php 或内容页 article*.php),可以直接使用 typeid 变量来获取当前栏目的 ID。

示例代码:

当前栏目的 ID 是:{dede:field name='typeid'/}

或者使用全局变量 $GLOBALS['typeid']

当前栏目的 ID 是:{$GLOBALS['typeid']}

场景2:获取指定栏目的 ID

如果你想在模板中调用一个固定栏目的信息,并获取其 ID,可以在 {dede:channel} 标签中使用 typeid 属性指定栏目。

示例代码:

指定栏目 ID 为 1 的栏目信息:
栏目ID:{dede:channel typeid='1' type='self'}[field:id/]{/dede:channel}
栏目名称:{dede:channel typeid='1' type='self'}[field:typename/]{/dede:channel}
  • typeid='1':指定要调用的栏目 ID。
  • type='self':表示只调用顶级栏目,如果指定的是子栏目,则调用其本身,通常为了确保准确,加上这个属性比较好。
  • [field:id/]:输出该栏目的 ID。

场景3:循环获取所有栏目的 ID

如果你想遍历所有栏目(或指定层级的栏目),并在循环中获取每个栏目的 ID。

示例代码:

所有顶级栏目及其ID:
<ul>
  {dede:channel type='top'}
  <li>
    栏目ID: [field:id/] - 栏目名称: [field:typename/]
  </li>
  {/dede:channel}
</ul>
所有一级栏目(包括顶级和其直接子栏目)及其ID:
<ul>
  {dede:channel type='son' noself='yes'}
  <li>
    栏目ID: [field:id/] - 栏目名称: [field:typename/]
  </li>
  {/dede:channel}
</ul>
  • type='top':只调用顶级栏目。
  • type='son':调用顶级栏目的所有直接子栏目。
  • type='self':调用指定栏目及其所有子栏目。
  • [field:id/]:在循环中,它会依次输出每个栏目的 ID。

使用 {dede:arclist} 标签(在文章列表中获取栏目ID)

当你使用 {dede:arclist} 调用文章列表时,也可以获取到文章所属栏目的 ID。

示例代码:

{dede:arclist titlelen='30' row='5'}
  - 文章标题:[field:title/]
  - 所属栏目ID:[field:typeid/]
  - 所属栏目名:[field:typename/]
{/dede:arclist}
  • [field:typeid/]:输出当前文章所属栏目的 ID。
  • [field:typename/]:输出当前文章所属栏目的名称。

使用 PHP 代码(在自定义函数或模板中)

如果你需要在 PHP 代码块中获取栏目 ID,比如在 include 文件或自定义的 PHP 模板文件中,可以直接使用 DedeCMS 的全局变量。

示例代码:

<?php
// 1. 获取当前栏目的 ID
$currentTypeId = $GLOBALS['typeid'];
echo "当前栏目ID是: " . $currentTypeId;
// 2. 获取指定栏目的信息(需要引入栏目缓存)
require_once(DEDEINC."/arc.partview.class.php");
$channel = new PartView();
$channel->SetTypeid(1); // 设置你要查询的栏目ID
$channel->dsql->SetQuery("SELECT * FROM `#@__arctype` WHERE id = 1");
$rs = $channel->dsql->GetOne();
if($rs){
    $specifiedTypeId = $rs['id'];
    $specifiedTypeName = $rs['typename'];
    echo "<br>指定栏目ID是: " . $specifiedTypeId;
    echo "<br>指定栏目名是: " . $specifiedTypeName;
}
?>
  • $GLOBALS['typeid']:这是 DedeCMS 中存储当前栏目 ID 的全局变量,非常方便。
  • #@__arctype:这是 DedeCMS 数据库中存储栏目的表名,#@__ 会在运行时被替换为数据库前缀。

总结与推荐

场景 推荐方法 示例
获取当前栏目页的 ID 使用 {dede:field name='typeid'}{$GLOBALS['typeid']} {dede:field name='typeid'/}
调用一个固定栏目并获取其 ID 使用 {dede:channel typeid='N'} {dede:channel typeid='1'}[field:id]{/dede:channel}
循环所有栏目并获取每个 ID 使用 {dede:channel} 循环标签 {dede:channel type='top'}[field:id]{/dede:channel}
在文章列表中获取栏目 ID 使用 {dede:arclist} 中的 [field:typeid/] [field:typeid/]
在 PHP 代码中获取 ID 使用 $GLOBALS['typeid'] 或数据库查询 $id = $GLOBALS['typeid'];

对于绝大多数模板制作需求,方法一 中的 {dede:channel}{dede:field} 标签已经足够强大和方便。

-- 展开阅读全文 --
头像
C语言TCP socket通信如何实现?
« 上一篇 01-23
dede软件频道下载默认等级
下一篇 » 01-23
取消
微信二维码
支付宝二维码

目录[+]