使用全局变量 $typename (最简单,适用于列表页和内容页)
这是最直接的方法,适用于大多数情况,尤其是在列表页和内容页。
适用场景:
- 栏目列表页 (
/plus/list.php?tid=XX) - 页 (
/plus/view.php?aid=XX)
核心变量:
在栏目列表页和文章内容页,织梦会自动将当前栏目的名称赋值给全局变量 $typename。
代码示例:
在模板文件(如 list_article.htm 或 article_article.htm)中,你可以直接使用:
<h1>当前栏目名称是:{dede:field.typename/}</h1>
或者使用PHP代码:
<?php
// 在PHP代码块中,可以直接使用 $typename 变量
echo "<h1>当前栏目名称是:".$typename."</h1>";
?>
使用 {dede:field} 标签 (适用于内容页)
页,你可以使用 {dede:field} 标签的 typeid 属性来获取当前栏目的ID,然后再通过这个ID获取其他信息。
适用场景:
- 页 (
/plus/view.php?aid=XX)
核心标签:
{dede:fieldtypeid/}: 获取当前栏目的ID。{dede:typetypeid='栏目ID' function='GetInfos(@me,栏目ID)'/}: 这是一个强大的自定义函数,用于根据栏目ID获取该栏目的任意信息。
代码示例: 假设你想在文章内容页获取当前栏目的“栏目描述”。
<h2>当前栏目名称:{dede:field.typename/}</h2>
<p>栏目描述:{dede:typetypeid='[field:typeid/]' function='GetInfos(@me, "description")'/}</p>
代码解释:
{dede:fieldtypeid/}: 先获取当前文章所在栏目的ID,5。[field:typeid/]: 这是{dede:typetypeid=}标签内部的一个占位符,它会替换为上一步获取到的ID值。function='GetInfos(@me, "description")': 这是核心。@me: 代表当前标签的值,在这里就是栏目ID5。"description": 是你想要获取的字段名,这里是“栏目描述”,你也可以换成typename(栏目名),seotitle(SEO标题),keywords(关键词) 等。GetInfos: 这是织梦内置的一个函数,用于查询dede_arctype表(栏目表)中的信息。
使用 GetOneTypeUrl() 函数 (获取栏目链接)
如果你想在模板中获取当前栏目的完整链接地址,这个函数非常有用。
适用场景:
- 栏目列表页
- 页
核心函数:
GetOneTypeUrl($typeid)
$typeid: 栏目的ID。
代码示例: 在模板中,你可以这样使用:
<!-- 使用PHP代码块 -->
<a href="<?php echo GetOneTypeUrl($typeid); ?>">返回 <?php echo $typename; ?> 栏目</a>
<!-- 或者,在列表页,可以直接用[field:id]获取ID -->
<a href="{dede:fieldtypeid function='GetOneTypeUrl(@me)'/}">返回 {dede:field.typename/} 栏目</a>
代码解释:
$typeid: 在列表页和内容页,这个全局变量同样存在,代表当前栏目的ID。GetOneTypeUrl($typeid): 函数会根据栏目ID,自动判断该栏目是最终列表栏目还是频道封面,并返回正确的URL地址。
在PHP文件中获取 (适用于自定义PHP页面)
如果你在自定义的PHP页面(index.php)中需要获取栏目信息,你需要手动查询数据库。
适用场景:
- 自定义的首页或PHP页面。
- 需要通过程序逻辑判断时。
核心代码:
你需要引入织梦的核心文件,然后使用 global $dsql; 来获取数据库连接对象,并进行查询。
代码示例:
假设你的URL是 yourdomain.com/index.php?tid=5,你想获取栏目ID为5的信息。
<?php
require_once (dirname(__FILE__) . "/include/common.inc.php"); // 引入织梦核心文件
// 1. 从GET或POST参数中获取栏目ID
$tid = isset($_GET['tid']) ? intval($_GET['tid']) : 0;
if ($tid > 0) {
// 2. 执行SQL查询
$sql = "SELECT * FROM `#@__arctype` WHERE id = $tid";
$row = $dsql->GetOne($sql);
if (is_array($row)) {
// 3. 使用查询结果
echo "<h1>栏目名称:" . $row['typename'] . "</h1>";
echo "<p>栏目描述:" . $row['description'] . "</p>";
echo "<p>SEO标题:" . $row['seotitle'] . "</p>";
// 你也可以使用方法三的函数来获取链接
$typeurl = GetOneTypeUrl($row['id']);
echo "<p>栏目链接:<a href='" . $typeurl . "'>" . $typeurl . "</a></p>";
} else {
echo "未找到ID为 $tid 的栏目。";
}
} else {
echo "请提供有效的栏目ID (tid)。";
}
?>
总结与对比
| 方法 | 适用场景 | 核心代码/标签 | 优点 | 缺点 |
|---|---|---|---|---|
| 方法一 | 列表页、内容页 | {dede:field.typename/} |
最简单,直接获取栏目名 | 只能获取栏目名,无法获取其他信息 |
| 方法二 | 内容页 | {dede:typetypeid='[field:id/]' function='...'} |
非常灵活,可获取栏目任意字段 | 稍微复杂,需要理解函数用法 |
| 方法三 | 列表页、内容页、PHP | GetOneTypeUrl($typeid) |
专业,能智能获取栏目链接 | 仅用于获取URL |
| 方法四 | 自定义PHP页面 | $dsql->GetOne("SELECT ...") |
最强大,完全可控,可用于复杂逻辑 | 需要写SQL,仅限PHP文件中使用 |
推荐使用顺序:
- 只需要栏目名? -> 方法一 (
{dede:field.typename/})。 - 页需要其他栏目信息? -> 方法二 (
{dede:typetypeid=...})。 - 需要获取栏目链接? -> 方法三 (
GetOneTypeUrl())。 - 在非模板的PHP文件中操作? -> 方法四 (手动查询数据库)。
希望这些方法能帮助你顺利解决问题!
