dede列表如何获取当前栏目ID?

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

使用 GetTopid() 函数(最推荐、最标准)

这是DedeCMS官方推荐的方法,专门用于获取当前顶级栏目ID,在列表页模板中,当前栏目ID通常存储在全局变量 typeid 中,但顶级栏目ID需要通过函数来获取。

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

使用场景:

  • 在列表页 (list_article*.php) 的模板文件中。
  • 当你需要调用顶级栏目的名称、关键词、描述等信息时。

代码示例:

在您的列表页模板文件(/templets/default/list_article.htm)中,直接使用:

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

代码解析:

dede 列表当前栏目id
(图片来源网络,侵删)
  1. {dede:field name='typeid'}:这部分会获取当前栏目的ID,并将其值存入 @me 这个临时变量中,如果在“子栏目A”下,@me 的值就是“子栏目A”的ID。
  2. function='GetTopid(@me)':这部分对 @me 的值(即当前栏目ID)执行 GetTopid() 函数,该函数会根据当前栏目ID,向上查找其顶级父栏目,并返回顶级栏目的ID。

更常见的用法(获取顶级栏目信息):

您通常不是直接输出ID,而是用它来获取顶级栏目的其他信息,比如顶级栏目的名称:

当前顶级栏目ID是:<strong>{dede:field name='typeid' function='GetTopid(@me)'/}</strong><br>
当前顶级栏目名称是:<strong>{dede:field name='typeid' function='GetTopid(@me)'/}</strong>

注意: 上面第二行代码是错误的,{dede:field} 标签不能直接这样嵌套,正确的做法是使用 channel 标签来调用栏目信息。

正确获取顶级栏目名称的示例:

dede 列表当前栏目id
(图片来源网络,侵删)
{dede:channel type='top' current='0'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

或者,如果你想明确获取当前顶级栏目ID对应的名称:

{dede:global name='typeid' function='GetTopid(@me)'/}

然后将这个ID用在 channel 标签中。


直接使用全局变量 $typeid

在某些情况下,您可能只需要当前栏目的ID,而不是顶级ID,这个ID可以直接通过PHP全局变量 $typeid 获取。

使用场景:

  • 在列表页模板中。
  • 当您只需要当前栏目的ID,不涉及上级或顶级栏目时。

代码示例:

在列表页模板中,您可以通过 {dede:global} 标签来输出这个PHP变量:

当前栏目ID是:<strong>{dede:global name='typeid'/}</strong>

代码解析:

  • {dede:global name='typeid'}:这个标签会直接输出PHP全局变量 $typeid 的值,在列表页中,$typeid 自动被赋值为当前栏目的ID。

注意事项:

  • 这个方法获取的是当前栏目的ID,如果当前页面是顶级栏目,那么它和顶级ID相同,如果是子栏目,那么它就是子栏目的ID。
  • 这个方法不适用于首页、文章页等其他页面,只在列表页有效。

在PHP文件中直接获取(适用于二次开发)

如果您是在列表页的PHP文件(list_article.php)中进行二次开发,而不是在模板文件里,那么您可以直接使用PHP代码来获取。

使用场景:

  • 修改 list_article.php 或其他相关PHP文件。
  • 在PHP逻辑代码中需要用到当前栏目ID。

代码示例:

list_article.php 文件中,您可以直接这样使用:

<?php
// 获取当前栏目ID
$currentTypeId = $typeid;
// 获取当前顶级栏目ID
$topTypeId = GetTopid($typeid);
// 现在您可以在PHP代码中使用这两个变量了
echo "当前栏目ID: " . $currentTypeId;
echo "<br>";
echo "顶级栏目ID: " . $topTypeId;
// ... 其他PHP逻辑
?>

总结与对比

方法 适用场景 优点 缺点
GetTopid() 当前顶级栏目ID 列表页模板,需要调用顶级栏目信息时 最标准、最可靠,符合DedeCMS的设计逻辑 获取的是顶级ID,不是当前ID
$typeid 当前栏目ID 列表页模板,只需要当前ID时 简单直接,无需调用函数 不适用于获取上级栏目信息
PHP变量 当前或顶级栏目ID PHP文件中进行二次开发时 灵活,可在PHP逻辑中直接使用 不适用于模板文件,需要修改PHP源码

实践建议:

  • 在列表页模板中,如果需要显示顶级栏目的名称、关键词等信息,请务必使用 {dede:field name='typeid' function='GetTopid(@me)'/} 结合 channel
  • 如果只是简单地判断一下当前是哪个栏目,或者传递给JS等,使用 {dede:global name='typeid'/} 即可。
  • 不要在模板中直接写PHP代码(如 <?php echo $typeid; ?>),这不是DedeCMS的标准用法,可能导致模板引擎解析错误。
-- 展开阅读全文 --
头像
如何修改织梦后台登录界面?
« 上一篇 今天
织梦如何搭建音乐网站?
下一篇 » 今天
取消
微信二维码
支付宝二维码