调用当前栏目下所有文章的标签(最常用)
这种方法会在列表页显示该栏目下所有文章关联的标签,它通过获取当前栏目的 ID,然后查询数据库中所有属于该栏目的文章,再获取这些文章的标签。
适用场景: 展示一个“热门标签”或“相关标签”板块,让用户快速了解本栏目的主题。
实现步骤:
- 打开你的列表模板文件,通常是
/templets/default/list_*.htm(list_article.htm)。 - 在你想要显示标签的位置,加入以下 PHP 代码和 DedeCMS 标签。
代码示例:
{dede:list pagesize='10'}
<!-- 这里是你的列表内容,比如文章标题 -->
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
<!-- 在列表内容结束后,添加以下代码来调用标签 -->
<div class="tags-list">
<h3>本栏目标签</h3>
<ul>
<?php
// 1. 获取当前栏目ID
$typeid = $GLOBALS['typeid'];
// 2. 查询该栏目下所有文章的ID
$dsql->SetQuery("SELECT id FROM `dede_archives` WHERE typeid = '$typeid'");
$dsql->Execute('t');
$tagids = array();
while ($row = $dsql->GetArray('t')) {
$tagids[] = $row['id'];
}
$tagids_str = implode(',', $tagids);
// 3. 如果该栏目下有文章,则查询这些文章的标签
if (!empty($tagids_str)) {
$dsql->SetQuery("SELECT tag FROM `dede_taglist` WHERE aid IN ($tagids_str) GROUP BY tag ORDER BY count DESC");
$dsql->Execute('t2');
while ($row2 = $dsql->GetArray('t2')) {
// 4. 获取标签的URL
$tagurl = GetTagUrl($row2['tag']);
echo "<li><a href='{$tagurl}'>{$row2['tag']}</a></li>";
}
}
?>
</ul>
</div>
代码解释:
$typeid = $GLOBALS['typeid'];:获取当前页面的栏目 ID。- 第一段
SELECT查询:从dede_archives(文章列表表) 中找出所有属于当前栏目的文章 ID。 implode(',', $tagids);:将文章 ID 数组转换成逗号分隔的字符串,用于IN查询。- 第二段
SELECT查询:从dede_taglist(标签关系表) 中查询出这些文章关联的所有标签,GROUP BY tag和ORDER BY count DESC用于合并重复标签并按使用次数排序。 GetTagUrl($row2['tag']);:这是 DedeCMS 的内置函数,用于根据标签名生成标签页的 URL。echo "<li>...</li>";:循环输出每个标签的链接。
调用当前文章的标签(在文章页 article_*.htm)
虽然你的问题是关于列表页,但这个方法非常基础且重要,作为补充。
适用场景: 在文章详情页,显示与当前文章相关的标签。
实现步骤:
- 打开文章详情模板
/templets/default/article_*.htm。 - 在合适位置加入以下代码。
代码示例:
<div class="article-tags">
<span>标签:</span>
{dede:tag type='current'/}
</div>
{dede:tag} 标签属性说明:
type='current':表示调用当前文章的标签。getall='0':默认为 0,表示调用当前文章的标签,设为 1 可以调用全站的热门标签。row='20':调用的标签数量。length='12':标签字符长度,超过部分用省略号表示。
更灵活的写法(可以自定义样式):
{dede:tag type='current' row='8' getall='0'}
<a href="[field:tagurl/]">[field:tag/]</a>
{/dede:tag}
在列表页循环调用每篇文章的标签(不推荐,性能差)
这种方法会为列表页的每一篇文章都单独查询一次标签,然后显示在文章标题旁边。
警告: 这种方法在文章数量较多时会产生大量的数据库查询,严重影响网站性能(N+1 查询问题)。仅适用于列表页文章数量极少(5 篇以内)的情况。
代码示例:
<ul>
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<!-- 在文章标题后面加上标签 -->
<span class="article-tags">
{dede:tag row='5' getall='0'}
<a href="[field:tagurl/]">[field:tag/]</a>
{/dede:tag}
</span>
</li>
{/dede:list}
</ul>
总结与推荐
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 方法一 | 性能好,只查询两次数据库,代码灵活,可自定义排序和样式。 | 逻辑稍复杂,需要写 PHP 代码。 | ⭐⭐⭐⭐⭐ (强烈推荐) |
| 方法二 | 代码极其简单,是 DedeCMS 的原生功能。 | 仅适用于文章详情页。 | ⭐⭐⭐⭐⭐ (文章页必备) |
| 方法三 | 使用简单,原生标签。 | 性能极差,文章多时网站会卡死。 | ⭐ (不推荐,仅在特殊情况下使用) |
对于你的需求“dede list 调用 tag”,强烈建议使用方法一,它兼顾了功能实现和网站性能,是专业开发者的首选。
