使用全局变量 $typename (最简单、最推荐)
这是最直接、最简单的方法,适用于绝大多数情况,织梦在文章页会自动定义一个全局变量 $typename,它直接存储了当前文章所属栏目的名称。
适用场景:
- 仅需获取栏目名称。
- 99% 的文章页需求都可以用此方法解决。
代码示例:
在你的 article_article.htm 模板文件中,直接使用以下代码即可:
<p>本文所属栏目:<strong>{dede:field name='typename'/}</strong></p>
或者使用PHP代码块:
<p>本文所属栏目:<strong><?php echo $typename; ?></strong></p>
代码解释:
{dede:field name='typename'/}是织梦的标签,用于获取当前文章的typename字段值。$typename是PHP变量,两者效果完全一样,标签形式更符合织梦模板的书写习惯。
使用 {dede:type} 标签 (最灵活、功能最强)
当你不仅需要栏目名称,还需要获取栏目的其他信息(如栏目链接、栏目ID、栏目简介等)时,{dede:type} 标签是最佳选择,它会查询当前文章所属的栏目信息,并在标签内循环输出。
适用场景:
- 需要同时获取栏目名称和栏目链接。
- 需要获取栏目的其他任意属性。
代码示例:
<p>
本文所属栏目:
<strong>
{dede:type}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:type}
</strong>
</p>
代码解释:
{dede:type}...{/dede:type}:这是一个单记录查询标签,用于获取当前文章的栏目信息。[field:typename/]:在{dede:type}标签内,使用[field:属性名/]来获取栏目的属性。typename就是栏目名称。[field:typelink/]:获取栏目的完整链接地址。- 上面的代码会生成类似“本文所属栏目:网站动态”的效果。
如何获取其他栏目属性?
{dede:type} 标签可以获取栏目的所有字段,只需将 typename 换成你想要的字段名即可,常用字段包括:
id:栏目IDtypename:栏目名称typedir:栏目目录(不带 )typelink:栏目完整链接description:栏目简介seotitle:栏目SEO标题
示例:获取栏目ID和简介
{dede:type}
栏目ID: [field:id/] <br>
栏目名称: [field:typename/] <br>
栏目简介: [field:description/] <br>
{/dede:type}
使用SQL查询 (最底层、最灵活)
如果你需要在PHP代码块中进行复杂的逻辑判断,或者 {dede:type} 标签无法满足你的需求时,可以直接执行SQL查询来获取栏目信息。
适用场景:
- 在PHP代码块中结合
if/else等逻辑进行判断。 - 需要跨表查询或复杂条件筛选。
- 不使用标签,完全用PHP代码实现。
代码示例:
在模板文件中使用 <?php ... ?> 代码块。
<?php
// 1. 获取当前文章的栏目ID
$arcID = $id; // $id 是当前文章的ID,全局变量
// 2. 查询文章表,获取栏目ID
$query = "SELECT typeid FROM `#@__archives` WHERE id = $arcID";
$row = $dsql->GetOne($query);
$typeid = $row['typeid'];
// 3. 如果栏目ID存在,则查询栏目表获取栏目名称
if($typeid){
$query2 = "SELECT typename FROM `#@__arctype` WHERE id = $typeid";
$row2 = $dsql->GetOne($query2);
$typename = $row2['typename'];
}
?>
<p>本文所属栏目:<strong><?php echo $typename; ?></strong></p>
代码解释:
$id:织梦全局变量,代表当前文章的ID。$dsql:织梦的数据库操作对象,用于执行SQL查询。#@__:这是织梦的前缀替换符,会自动替换为你后台设置的数据库表前缀(如dede_)。GetOne():执行查询并返回第一条结果(关联数组形式)。- 这种方法最灵活,但代码量也最多,容易出错,不推荐在简单需求下使用。
总结与推荐
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
{dede:field name='typename'} |
代码最简单,性能最好 | 只能获取名称,无法获取其他信息 | ★★★★★ (首选) |
{dede:type} |
功能最强大,灵活,可获取栏目所有信息 | 代码比方法一稍长 | ★★★★☆ (需要链接或更多信息时) |
| SQL查询 | 最灵活,可结合PHP逻辑 | 代码复杂,容易出错,性能略低 | ★★☆☆☆ (特殊需求时使用) |
给你的建议:
- 如果只需要显示栏目名称,请毫不犹豫地使用 方法一。
- 如果需要同时显示栏目名称和链接,请使用 方法二。
- 除非有特殊且复杂的需求,否则尽量避免使用 方法三。
希望这些方法能帮助你解决问题!
