织梦动态调取栏目id

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

在列表页或内容页获取当前栏目的ID

这是最常见的需求,比如在列表页调用当前栏目下的子栏目,或在文章页获取当前文章所属的栏目ID。

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

织梦在解析页面时,会自动将当前页面的栏目ID存储在全局变量 $typeid 中,你可以在任何需要的地方直接调用它。

适用页面:

  • *列表页 (`list_.php`)**:当前正在显示的栏目ID。
  • *内容页 (`article_.php`)**:当前文章所属的栏目的ID。
  • 首页 (index.php):在首页,$typeid 的值为 0

示例代码:

你可以直接在模板文件(.htm)的任意位置使用 {$typeid}

示例1:在列表页的标题中显示当前栏目ID

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

示例2:在内容页调用当前栏目下的文章 假设你在文章详情页,想调用与当前文章同属一个栏目的其他文章(相关文章)。

{dede:arclist typeid='{$typeid}' titlelen='30' row='10'}
    <li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}

这里的 typeid='{$typeid}' 就使用了当前文章的栏目ID。

方法2:使用PHP代码获取

如果你需要在PHP代码块({dede:type} 标签内或自定义PHP函数)中获取栏目ID,可以直接使用 $typeid 变量。

示例:

{dede:type typeid=''}
    当前栏目ID是:[field:id/]
    <hr>
    通过PHP变量获取,当前栏目ID是:<?php echo $typeid; ?>
{/dede:type}

注意:在 {dede:type} 标签内部,$typeid 指的是标签指定的 typeid,如果标签没有指定,则继承页面的 $typeid


调用指定栏目的ID

你知道栏目的名称或者别名,需要获取它的ID。

方法1:通过栏目名称获取

这个需要你在模板文件中嵌入一小段PHP代码来实现。

示例代码: 假设你想获取一个名称为“公司简介”的栏目的ID。

<?php
// 引入数据库配置文件,确保$dbname等变量可用
// 通常在织梦模板中,这个环境已经存在,无需重复引入
// require_once(DEDEROOT.'/data/config.php');
// 定义要查询的栏目名称
$typename = '公司简介';
// 执行SQL查询
$dsql = new DedeSql(false);
$dsql->SetQuery("SELECT id FROM `#@__arctype` WHERE typename LIKE '{$typename}'");
$dsql->Execute('me');
if($row = $dsql->GetArray('me')) {
    $target_id = $row['id'];
    echo "找到的栏目ID是:" . $target_id;
} else {
    echo "未找到名称为 '{$typename}' 的栏目";
}
$dsql->Close();
?>

方法2:通过栏目别名获取

与方法1类似,只是查询条件从 typename 改为 typedir(注意:typedir 存储的是完整路径,/about/gsjj/,而 alias 才是纯别名,通常我们用 typedir 来判断)。

示例代码: 假设你想获取一个路径为 /about/gsjj/ 的栏目的ID。

<?php
// 定义要查询的栏目路径
$typedir = '/about/gsjj/';
// 执行SQL查询
$dsql = new DedeSql(false);
$dsql->SetQuery("SELECT id FROM `#@__arctype` WHERE typedir LIKE '{$typedir}'");
$dsql->Execute('me');
if($row = $dsql->GetArray('me')) {
    $target_id = $row['id'];
    echo "找到的栏目ID是:" . $target_id;
} else {
    echo "未找到路径为 '{$typedir}' 的栏目";
}
$dsql->Close();
?>

更推荐的方式是使用 alias (纯别名) 字段,因为它更简洁,你需要在后台栏目管理中为每个栏目设置别名。

// 使用 alias 查询
$alias = 'gsjj'; // 假设别名为 gsjj
$dsql->SetQuery("SELECT id FROM `#@__arctype` WHERE alias = '{$alias}'");
// ... 后续代码相同

调用顶级栏目ID

你当前在一个子栏目页,但需要获取它所属的顶级栏目的ID。

织梦的 #@__arctype 表中有一个 topid 字段,它存储了该栏目的顶级栏目ID,如果它本身就是顶级栏目,topid 的值就是它自己的ID。

示例代码: 在子栏目列表页或内容页,获取顶级栏目ID。

顶级栏目ID是:{$topid}

如果当前页面是顶级栏目,{$topid} 的值就是 {$typeid}


总结与最佳实践

场景 推荐方法 代码示例 说明
获取当前页面的栏目ID 全局变量 $typeid {$typeid} 最常用、最简单,适用于列表页、内容页等。
通过名称/路径获取指定栏目ID PHP + SQL 查询 见上方代码 灵活,但需要编写少量PHP代码,适用于模板中调用固定栏目的情况。
获取当前栏目的顶级栏目ID 全局变量 $topid {$topid} 适用于需要面包屑导航或判断上级栏目的场景。
在循环标签内获取栏目ID 标签属性 typeid[field:id] {dede:arclist typeid='1'}[field:id] {dede:type} 等循环标签内,[field:id] 获取的是当前循环项的ID。

重要提示:

  • 模板修改:请务必在后台的【模板管理】->【模板文件列表】中修改对应的 .htm 文件,而不是直接修改PHP程序文件。
  • 缓存问题:修改模板后,如果页面没有更新,请去后台【生成】->【更新HTML】中重新生成对应页面,或者清除浏览器缓存。
  • 安全:在使用PHP查询数据库时,如果变量来自用户输入(如URL参数),请务必进行过滤和转义,以防SQL注入,但上述示例中的变量(如栏目名)通常是硬编码或由系统本身提供,风险较低。

希望这份详细的指南能帮助你解决织梦动态调取栏目ID的问题!

-- 展开阅读全文 --
头像
织梦网站模板制作教程难不难学?
« 上一篇 03-26
织梦生成不了html,是哪里出问题了?
下一篇 » 03-26

相关文章

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

目录[+]