在文章列表页(如首页、列表页)调用收藏数
这是最常见的需求,比如在文章列表的摘要旁边显示一个“收藏”按钮和收藏数量。

(图片来源网络,侵删)
第1步:找到并打开模板文件
你需要修改的模板文件是 templets/default/list_article.htm (假设你使用的是默认模板,请根据你的实际模板路径进行修改)。
第2步:在模板中添加调用代码
在 list_article.htm 文件中,你希望显示收藏数的位置,添加以下代码:
[field:id function="GetFnums(@me)" /]
示例:
假设你的文章列表项(li标签)模板是这样的:

(图片来源网络,侵删)
<li>
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p class="intro">[field:description function='cn_substr(@me, 100)'/]...</p>
<div class="info">
<span>作者:[field:writer/]</span>
<span>时间:[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
<span>点击:[field:click/]</span>
</div>
</li>
你可以在 info div 中添加收藏数的显示:
<li>
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p class="intro">[field:description function='cn_substr(@me, 100)'/]...</p>
<div class="info">
<span>作者:[field:writer/]</span>
<span>时间:[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
<span>点击:[field:click/]</span>
<span>收藏:<strong>[field:id function="GetFnums(@me)" /]</strong></span>
</div>
</li>
代码解释:
[field:id]:获取当前文章的ID。function="GetFnums(@me)":这是核心,它调用了helper_archives.php文件中的GetFnums()函数,并将当前文章的ID (@me) 作为参数传递进去,函数会返回该文章的收藏总数。
第3步:更新生成页面
保存模板文件后,到DedeCMS后台的“生成” -> “更新主页HTML”或“更新栏目HTML”,重新生成你修改过的页面,就能看到效果了。
页(文章详情页)调用收藏数
页调用收藏数非常简单,因为DedeCMS已经内置了全局变量 $fields,其中就包含了收藏数。
第1步:打开模板文件
页的模板文件,通常是 templets/default/article_article.htm。
第2步:添加调用代码
在需要显示的位置,直接使用以下标签:
{dede:field.fnums /}
或者你也可以使用更灵活的调用方式,与方法一类似:
[field:id function="GetFnums(@me)" /]
页都能正常工作,但 {dede:field.fnums /} 更为简洁。
示例: 下方、作者信息旁边添加:
<div class="article-info">
<span>作者:{dede:field.writer/}</span>
<span>来源:{dede:field.source/}</span>
<span>发布时间:{dede:field.pubdate function="MyDate('Y-m-d H:i:s', @me)"/}</span>
<span>阅读:{dede:field.click/}</span>
<span>收藏:<strong>{dede:field.fnums /}</strong></span>
</div>
在自定义页面(如首页焦点图)调用收藏数
如果你想在首页的一个自定义区域(例如一个指定的文章列表)调用收藏数,方法与列表页类似,但需要确保循环标签正确。
第1步:打开首页模板文件
打开 templets/default/index.htm。
第2步:在指定循环内添加代码
假设你使用 {dede:arclist} 标签来调用文章,那么就在这个标签内部使用 function 属性。
{dede:arclist titlelen='30' row='5'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>收藏数:[field:id function='GetFnums(@me)'/]</span>
</li>
{/dede:arclist}
代码解释:
{dede:arilogy...}:文章列表循环标签。[field:id function='GetFnums(@me)'/]:在循环的每一次中,获取当前文章的ID,并调用GetFnums()函数获取其收藏数。
重要注意事项与排查
如果调用后显示为 0 或者没有显示,请检查以下几点:
-
确认数据库中存在收藏数据
- 登录你的网站后台,进入“会员” -> “收藏管理”。
- 查看是否有用户收藏过文章,如果这里一条记录都没有,那么前端自然显示为0。
- 手动收藏一篇文章,然后再刷新页面看是否正常显示。
-
确认
helper_archives.php文件存在且未被修改- 这个文件位于
/include/helpers/目录下,确保它存在并且里面的GetFnums()函数是完整的。 GetFnums()函数的核心代码是查询dede_member_stow表(默认的收藏表)。
- 这个文件位于
-
检查缓存问题
- 有时候修改模板后,如果开启了静态页面生成,需要重新生成页面才能看到效果。
- 可以尝试在后台的“系统” -> “系统设置” -> “清除所有HTML缓存”中清除缓存。
-
检查数据库表前缀
- 如果你修改了DedeCMS的数据库表前缀(默认是
dede_),那么需要确保GetFnums()函数中的查询语句也相应地修改了,通常官方提供的函数是通用的,会使用系统配置$cfg_dbprefix,所以一般不会出问题。
- 如果你修改了DedeCMS的数据库表前缀(默认是
| 场景 | 调用代码 | 说明 |
|---|---|---|
| 文章列表页 | [field:id function="GetFnums(@me)" /] |
最常用,适用于 list_xxx.htm 模板。 |
| 页 | {dede:field.fnums /} 或 [field:id function="GetFnums(@me)" /] |
内容页有内置变量,{dede:field.fnums /} 更简单。 |
| 自定义页面/首页 | [field:id function='GetFnums(@me)'/] |
在 {dede:arclist} 等循环标签内部使用。 |
希望这份详细的指南能帮助你成功在织梦DedeCMS中调用收藏数!
