dede如何获取当前栏目url?

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

使用 GetOneTypeUrl 函数 (最推荐)

这是 DedeCMS 官方推荐的标准方法,因为它能正确处理所有类型的栏目(包括外部链接、频道封面、普通栏目等),并且兼容各种伪静态设置。

dede 获取当前栏目url
(图片来源网络,侵删)

适用场景:在任何需要获取当前栏目 URL 的地方,尤其是在列表页和内容页。

代码示例

<?php
// 获取当前栏目ID(如果在列表页或内容页,通常可以用 $typeid 变量)
$currentTypeId = $typeid; 
// 如果当前变量不存在,你需要先获取它,例如在自定义PHP页面中
// $currentTypeId = $GLOBALS['typeid'];
// 使用 GetOneTypeUrl 函数根据栏目ID获取URL
$channelUrl = GetOneTypeUrl($currentTypeId);
// 输出URL
echo $channelUrl;
?>

代码解析

  • $typeid:这是 DedeCMS 的一个全局变量,在列表页(list_*.php页(article_*.php)中,它自动代表当前栏目的 ID。
  • GetOneTypeUrl($typeid):这是核心函数。
    • 它接收一个栏目ID作为参数。
    • 它会智能地判断该栏目的类型(是普通列表、频道封面还是外部链接)。
    • 它会根据系统设置的“是否使用伪静态”选项,返回正确的静态URL(如 /category/1.html)或动态URL(如 /plus/list.php?tid=1)。
    • 如果栏目设置为“外部链接”,它会直接返回你设置的外部链接地址。

使用全局变量 $typeurl (仅在列表页有效)

在列表模板文件(list_articled.htm)中,DedeCMS 已经预先计算好了当前栏目的 URL 并存放在全局变量 $typeurl 中,这是一种非常直接的方法,但仅适用于列表页

dede 获取当前栏目url
(图片来源网络,侵删)

适用场景:仅在列表模板(list_*.htm)中。

代码示例

<a href="{dede:field name='typeurl'/}">返回上级栏目</a>

或者直接使用PHP代码:

<?php
echo $typeurl;
?>

代码解析

  • {dede:field name='typeurl'/}:这是 DedeCMS 的一个底层字段,在列表页模板中,它等同于 $typeurl 变量。
  • $typeurl:这个变量只在列表页存在并有效,在其他页面(如首页、内容页)直接使用会报错或为空,它的通用性不如 GetOneTypeUrl

直接调用 GetOneTypeUrl 并手动指定栏目ID (适用于自定义页面)

如果你在一个不包含 $typeid 变量的自定义 PHP 页面中,并且你知道目标栏目的 ID,可以直接调用 GetOneTypeUrl 函数。

适用场景:自定义的 PHP 页面、首页等需要调用特定栏目 URL 的地方。

代码示例

假设你想获取 ID 为 5 的栏目的 URL:

<?php
// 假设目标栏目的ID是5
$targetTypeId = 5;
// 调用函数获取URL
$channelUrl = GetOneTypeUrl($targetTypeId);
// 输出URL,<a href="...">栏目名称</a>
echo "<a href='".$channelUrl."'>我的栏目</a>";
?>

使用 SQL 查询 (不推荐,了解即可)

虽然可以通过查询 dede_arctype 数据库表来获取栏目信息并拼接 URL,但这是一种非常不推荐的做法,原因如下:

  1. 代码冗余:需要自己写 SQL 语句,处理数据库连接和结果集,代码量多。
  2. 逻辑复杂:你需要自己判断栏目类型、是否启用伪静态,然后手动拼接 URL,容易出错。
  3. 违背 MVC 思想:DedeCMS 已经封装好了这些底层逻辑,直接绕开使用原生 SQL 是不好的习惯。

仅作为知识了解

<?php
// 不推荐的做法!
global $dsql;
$tid = 5; // 目标栏目ID
$row = $dsql->GetOne("SELECT * FROM `dede_arctype` WHERE id = $tid");
if ($row['isdefault'] == -1) {
    // 如果是外部链接
    $url = $row['typedir'];
} else {
    // 普通栏目或频道封面
    $url = $row['typedir'];
    // 这里还需要根据系统设置处理 {cmspath} 等变量,非常麻烦
}
echo $url;
?>

总结与最佳实践

方法 优点 缺点 推荐场景
GetOneTypeUrl($typeid) 官方标准,功能强大,兼容性好,自动处理伪静态和外部链接 需要确保 $typeid 变量存在或已定义 所有场景,尤其是列表页和内容页
$typeurl 变量 在列表页中极其简单,直接调用即可 仅在列表页有效,通用性差 *仅在列表模板 `list_.htm` 中**
手动调用 GetOneTypeUrl 灵活,可在任何地方调用特定栏目的 URL 需要手动知道并传入栏目 ID 自定义页面、首页等需要调用固定栏目 URL 的地方
SQL 查询 理论上可行 代码冗余、逻辑复杂、易出错、不推荐 不推荐使用

核心建议

  • 在列表页或内容页:直接使用 <?php echo GetOneTypeUrl($typeid); ?>,这是最标准、最可靠的方式。
  • 在列表模板中:可以使用 {dede:field name='typeurl'/},因为它更简洁且专为列表页设计。
  • 在任何其他 PHP 文件中:如果你知道栏目 ID,就使用 GetOneTypeUrl(ID),如果你不知道,可能需要先通过其他方式(如根据栏目名查 ID)获取。
-- 展开阅读全文 --
头像
织梦导航栏如何调用指定栏目数目?
« 上一篇 01-28
织梦首页幻灯为何不显示图片?
下一篇 » 01-28

相关文章

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

目录[+]