使用系统自带的标签(最简单、最常用)
这是最直接的方法,通过织梦的内置标签 arclistsg 来实现,它会根据文章的标签使用频率来生成热门标签列表。

(图片来源网络,侵删)
标签名:
{dede:arclistsg sort='hot' titlelen='24' row='20'}
参数说明:
sort='hot':核心参数,表示按热门(即标签被引用的次数)排序。row='20':表示调用多少个热门标签,len='24'`:表示标签名称的显示长度,中文为2个字符,24即显示12个汉字,超出部分会被截断。subday='30':可选参数,表示只统计最近30天内的标签热度,如果不加,则统计全站所有时间的热度。getall='1':可选参数,设置为1时,会调用所有标签,否则只调用有文章的标签,通常默认即可。
完整代码示例:
<div class="hot-tags">
<h3>热门标签</h3>
<ul>
{dede:arclistsg sort='hot' titlelen='24' row='20' subday='30'}
<li>
<a href="[field:typelink/]" title="[field:typename/]">[field:typename/]</a>
<span>([field:result/])</span> <!-- 显示该标签被引用的次数 -->
</li>
{/dede:arclistsg}
</ul>
</div>
代码解释:
[field:typelink/]:获取标签的链接地址。[field:typename/]:获取标签的名称。[field:result/]:获取该标签被引用的次数(即热度值)。
使用SQL直接查询(更灵活、更强大)
当系统自带的标签无法满足你的需求时(你需要自定义排序方式、显示样式或进行更复杂的筛选),可以直接在模板中嵌入SQL查询。
核心SQL思路:
- 从
dede_taglist表中查询每个标签(tagname)的出现次数(count)。 - 按
count(次数)降序排序。 - 使用
LIMIT限制返回的结果数量。
完整代码示例:
<div class="hot-tags">
<h3>热门标签 (SQL版)</h3>
<ul>
{dede:sql sql="SELECT tagname, count FROM dede_taglist GROUP BY tagname ORDER BY count DESC LIMIT 0, 20"}
<li>
<a href='/tags.php?/[field:tagname/]/' title="[field:tagname/]">[field:tagname/]</a>
<span>([field:count/])</span>
</li>
{/dede:sql}
</ul>
</div>
代码解释:

(图片来源网络,侵删)
dede:sql:织梦的SQL查询标签。SELECT tagname, count FROM dede_taglist:从dede_taglist表中查询标签名和引用次数。GROUP BY tagname:按标签名分组,这是计算每个标签出现次数的关键。ORDER BY count DESC:按引用次数降序排列,得到最热门的标签。LIMIT 0, 20:从第0条开始,取20条记录,你可以修改20来调整显示数量。/tags.php?/[field:tagname/]/:标签页的默认链接格式,请根据你的网站实际路径调整。
调用指定栏目下的热门标签
有时候你可能只想在某个栏目页调用该栏目下的热门标签,而不是全站的,这时结合SQL和 typeid 参数可以实现。
核心SQL思路:
- 从
dede_taglist表查询。 - 通过
LIKE筛选出包含当前栏目ID的标签(因为织梦在生成标签时,会将栏目ID附加到标签名后,#栏目ID#标签名”)。 - 同样按次数排序并限制数量。
完整代码示例(需要放在栏目页模板中):
<div class="hot-tags">
<h3>本栏目热门标签</h3>
<ul>
{dede:sql sql="SELECT SUBSTRING_INDEX(tagname, '#', -1) as tagname, count FROM dede_taglist WHERE tagname LIKE '%#[field:typeid]#%' GROUP BY tagname ORDER BY count DESC LIMIT 0, 15"}
<li>
<a href='/tags.php?/[field:tagname/]/' title="[field:tagname/]">[field:tagname/]</a>
<span>([field:count/])</span>
</li>
{/dede:sql}
</ul>
</div>
代码解释:
SUBSTRING_INDEX(tagname, '#', -1):这是一个MySQL函数,用于从字符串tagname中获取最后一个 后面的内容,也就是我们真正想要的标签名。WHERE tagname LIKE '%#[field:typeid]#%':这是筛选的关键。[field:typeid]会自动获取当前栏目的ID,这个条件确保只查询包含当前栏目ID的标签。LIMIT 0, 15:这里我们只显示15个本栏目的热门标签。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
arclistsg |
最简单,无需写SQL,官方支持,性能较好。 | 灵活性较低,自定义能力差。 | 日常使用,绝大多数情况下推荐此方法。 |
| 直接SQL | 非常灵活,可以自定义任何排序和筛选逻辑。 | 需要懂一点SQL,如果标签表结构变化可能导致代码失效。 | 需要特殊功能,如按时间、权重等自定义排序时。 |
| 指定栏目SQL | 精准定位,调用特定栏目的热门标签。 | 逻辑相对复杂,需要理解织梦标签的存储方式。 | 在栏目页调用该栏目的热门标签。 |
推荐首选: 对于绝大多数网站,使用 方法一 就足够了,它简单、高效且稳定,只有在方法一无法满足你的特定需求时,再考虑使用方法二或方法三。
希望这些方法能帮到你!

(图片来源网络,侵删)
