织梦如何调用当前栏目ID?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 织梦建站 正文

在列表页和文章页(最常用)

这是最核心、最常用的方法,织梦系统在处理列表页和文章内容页时,会自动将当前栏目的ID存入一个全局变量中。

织梦调用当前栏目id
(图片来源网络,侵删)

核心变量: $typeid

这个变量在列表页(list_article*.php)和文章页(article_article*.php)中都是自动可用的,它存储的就是当前栏目的ID。


场景1:在列表页模板(list_article.htm)中调用

你想在列表页的标题上方显示“您正在浏览的是 [栏目名称] 栏目”,并且需要用到栏目ID。

<h2>您正在浏览的是:[field:typename /] 栏目</h2>
<p>当前栏目ID是:{dede:field.typeid/}</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}

代码解释:

织梦调用当前栏目id
(图片来源网络,侵删)
  • {dede:field.typeid/}:这是最直接的调用方式,直接输出当前栏目的ID。
  • typeid 也可以用在其他标签中,例如在 {dede:arclist} 标签里,如果你想在子列表中调用父级ID,但通常 field.typeid 就足够了。

场景2:在文章内容页模板(article_article.htm)中调用

在文章页,你可能想显示文章所属的栏目信息,或者将栏目ID传递给某些JS函数。

<h1>[field:title/]</h1>
<div class="info">
    <span>来源:[field:source/]</span>
    <span>作者:[field:writer/]</span>
    <span>发布时间:[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    <span>栏目ID:<strong>{dede:field.typeid/}</strong></span>
    <span>栏目名:<strong>{dede:field.typename/}</strong></span>
</div>
<div class="content">
    [field:body/]
</div>

代码解释:

  • 同样使用 {dede:field.typeid/} 来获取当前文章所在栏目的ID。
  • {dede:field.typename/} 用于获取栏目名称,与ID配合使用非常方便。

在首页、封面页等其他页面

在首页或者自定义的封面页等非列表/文章页,$typeid 变量是空的,如果你需要在这些页面获取某个指定栏目的ID,有几种方法。

场景3:通过自由列表(Free Channel)获取

这是最规范、最推荐的方法,尤其适合在首页等位置调用。

  1. 在后台创建自由列表

    • 登录织梦后台 -> 核心 -> 频道模型 -> 自由列表管理。
    • 点击“增加自由列表”,填写列表名称(首页产品推荐”)。
    • 在“指定栏目”部分,选择你想要调用其ID的那个栏目,你可以选择单个栏目,也可以选择多个。
    • 其他选项根据需要填写,然后保存。
  2. 在模板中调用

    • 在首页模板中,使用 {dede:freelist} 标签来调用你创建的自由列表。
    • {dede:freelist} 标签内部,你就可以使用 {dede:field.typeid/} 来获取这个自由列表所指定的栏目ID。
{dede:freelist titlelen='40' row='8'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <p>本条目属于栏目ID: {dede:field.typeid/}</p>
    </li>
{/dede:list}

注意:这里的 typeid 指的是自由列表所绑定的那个栏目的ID。

场景4:通过SQL查询直接获取

如果你对PHP和SQL有一定了解,可以直接在模板中使用 dede:sql 标签进行查询。

假设你知道栏目的目录(typedir),product,你可以通过它来查询ID。

{dede:sql sql="Select id From `dede_arctype` where typedir like '%product%'"}
    当前栏目的ID是:[field:id/]
{/dede:sql}

缺点

  • 不够灵活,需要硬编码目录名。
  • 如果有多个栏目目录名相似,可能会查询到多个结果,处理起来比较麻烦。
  • 不推荐常规使用,仅在特殊情况下考虑。

在PHP代码文件中获取

如果你在自定义的PHP文件(比如一个自定义的页面模板 my_page.php)中需要获取当前栏目ID,你需要手动获取。

<?php
require_once(dirname(__FILE__)."/include/common.inc.php");
// 获取当前栏目ID
// 如果是通过栏目链接进入的,index.php?tid=5
$typeid = isset($typeid) ? intval($typeid) : 0;
// 如果是直接访问的页面,没有tid参数,你可能需要其他逻辑来获取
// 如果你知道栏目ID是固定的
// $typeid = 1; 
if($typeid > 0) {
    // 使用这个ID查询栏目信息
    $typeInfo = $dsql->GetOne("SELECT * FROM `#@__arctype` WHERE id = '$typeid'");
    if(is_array($typeInfo)) {
        echo "栏目名称是:" . $typeInfo['typename'];
        echo "<br>";
        echo "栏目ID是:" . $typeInfo['id'];
    }
} else {
    echo "未指定栏目ID";
}
?>

总结与对比

场景 推荐方法 核心代码 说明
列表页 (list_*.htm) 直接调用系统变量 {dede:field.typeid/} 最简单、最常用,系统自动提供。
文章页 (article_*.htm) 直接调用系统变量 {dede:field.typeid/} 同上,用于获取文章所属栏目的ID。
首页/封面页 自由列表 {dede:freelist}...{dede:field.typeid/}...{/dede:freelist} 最规范的方法,适合在首页调用指定栏目的内容并获取其ID。
首页/封面页 SQL查询(备选) {dede:sql}...[field:id/]{/dede:sql} 灵活性差,容易出错,仅在不方便使用自由列表时使用。
PHP代码文件 手动获取 $typeid 变量 $typeid = isset($typeid) ? intval($typeid) : 0; 用于开发自定义功能时,在PHP层面获取ID。

核心要点{dede:field.typeid/} 这个标签,它能在90%的情况下解决你的问题,如果它不起作用,说明你可能不在列表页或文章页,此时应考虑使用自由列表的方法。

-- 展开阅读全文 --
头像
dede 文章列表分页
« 上一篇 今天
织梦CSS路径代码如何正确配置与使用?
下一篇 » 今天

相关文章

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

目录[+]