下面我将为你提供最常用、最标准的方法,以及一些进阶用法。

核心原理
织梦的顶踩功能是通过一个JS函数 digg() 来实现的,这个函数会向一个特定的PHP文件发送请求,更新数据库中的顶踩数,在模板中,我们只需要调用织梦内置的函数来从数据库读取并显示这些数字即可。
使用织梦内置的 GetArcVote() 函数(推荐)
这是最简单、最标准的方法,适用于列表页(如 index.htm, list_article.htm页(如 article_article.htm)。
步骤 1: 在模板文件中调用
在需要显示顶踩次数的地方,直接使用织梦的标签。
在列表页(如 index.htm)中调用

{dede:arclist titlelen='30' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<!-- 调用顶踩次数 -->
<span class="diggnum">顶: [field:goodpost/]</span>
<span class="digdownnum">踩: [field:badpost/]</span>
</li>
{/dede:arclist}
页(如 参数说明: 顶踩功能需要依赖一个JavaScript文件 这个JS文件位于 在模板的 重要提示: 如果你发现内置函数在某些情况下不工作,或者需要更复杂的显示逻辑,你可以自己创建一个函数。 打开 你可以在任何模板文件中使用 在列表页( 页( 页顶踩功能,不仅需要显示数字,还需要让用户能够点击。 模板文件 ( 代码解释: 如果顶踩功能不工作,请按以下顺序检查: 通常情况下,方法一 就能满足绝大多数需求,是最推荐的做法。article_article.htm)中调用
页,调用方式略有不同,通常使用 {dede:field}
<h1>[field:title/]</h1>
<div class="info">
<!-- 调用顶踩次数 -->
顶: <span class="diggnum">[field:goodpost/]</span> |
踩: <span class="digdownnum">[field:badpost/]</span>
</div>
<!-- 其他内容... -->
[field:goodpost/]:获取文章的“顶”的数量。[field:badpost/]:获取文章的“踩”的数量。步骤 2: 确保JS文件被正确加载
digg.js 来处理用户的点击事件,请确保你的模板文件中引入了这个JS文件。/include/dedeajax2.js 和 /images/digg.js。<head> 标签内或页面底部加入以下代码:<script type="text/javascript" src="{dede:global.cfg_cmspath/}/include/dedeajax2.js"></script>
<script type="text/javascript" src="{dede:global.cfg_cmspath/}/images/digg.js"></script>
{dede:global.cfg_cmspath/} 会自动替换为你网站的根目录路径,确保JS文件能被正确找到。
手动编写函数(更灵活)
步骤 1: 在底层函数文件中添加自定义函数
/include/arc.archives.class.php 文件(如果是内容页)或 /include/arc.listview.class.php(如果是列表页),在文件末尾的 ?> 之前,添加以下代码:/**
* 获取文章的顶踩次数
* @param int $aid 文章ID
* @return string 返回格式化后的顶踩字符串
*/
function GetArcVote($aid)
{
global $dsql;
$row = $dsql->GetOne("SELECT goodpost, badpost FROM `#@__archives` WHERE id = $aid");
if (is_array($row)) {
return "顶:{$row['goodpost']} | 踩:{$row['badpost']}";
} else {
return "顶:0 | 踩:0";
}
}
步骤 2: 在模板中调用
{dede:mytag} 来调用这个新函数。{dede:arclist})中调用{dede:arclist titlelen='30' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<!-- 调用自定义函数 -->
[field:id function="GetArcVote(@me)"/]
</li>
{/dede:arclist}
{dede:field})中调用<h1>[field:title/]</h1>
<div class="info">
<!-- 调用自定义函数 -->
{dede:field.id function="GetArcVote(@me)"/}
</div>
完整示例:内容页顶踩功能实现
article_article.htm)<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
<!-- 引入JS文件 -->
<script type="text/javascript" src="{dede:global.cfg_cmspath/}/include/dedeajax2.js"></script>
<script type="text/javascript" src="{dede:global.cfg_cmspath/}/images/digg.js"></script>
</head>
<body>
<h1>{dede:field.title/}</h1>
<div class="info">
<span>作者:{dede:field.writer/}</span> |
<span>时间:{dede:field.pubdate function="MyDate('Y-m-d H:i:s',@me)"/}</span> |
<!-- 显示顶踩次数 -->
<span>顶: <span class="diggnum">{dede:field.goodpost/}</span></span> |
<span>踩: <span class="digdownnum">{dede:field.badpost/}</span></span>
</div>
<div class="content">
{dede:field.body/}
</div>
<!-- 顶踩区域 -->
<div class="diggbox">
<div class="diggbox digg_good">
<div id="digg_good" class="digg_num">{dede:field.goodpost/}</div>
<div class="digg_percent"><span id="goodper">{dede:goodper/}%</span></div>
<div class="digg_btn"><a href="javascript:;" onclick="digg('good')">顶一下</a></div>
</div>
<div class="diggbox digg_bad">
<div id="digg_bad" class="digg_num">{dede:field.badpost/}</div>
<div class="digg_percent"><span id="badper">{dede:badper/}%</span></div>
<div class="digg_btn"><a href="javascript:;" onclick="digg('bad')">踩一下</a></div>
</div>
</div>
<script type="text/javascript">
// 用于顶踩后无刷新更新数据
function getDigg(aid)
{
var taget_obj = document.getElementById('digg_good');
var taget_obj2 = document.getElementById('digg_bad');
var myajax = new DedeAjax(taget_obj, false, false, '', '', false);
myajax.SendGet2("/plus/digg_ajax.php?aid=" + aid + "&action=good");
myajax = new DedeAjax(taget_obj2, false, false, '', '', false);
myajax.SendGet2("/plus/digg_ajax.php?aid=" + aid + "&action=bad");
DedeXHTTP = null;
}
</script>
</body>
</html>
{dede:field.goodpost/} 和 {dede:field.badpost/}:显示当前的顶踩数。{dede:goodper/} 和 {dede:badper/}:显示顶踩的百分比(织梦内置函数)。onclick="digg('good')" 和 onclick="digg('bad')":这是 digg.js 中的核心函数,会向 /plus/digg_ajax.php 发送请求。getDigg(aid):这个函数会在用户投票后,通过AJAX请求更新页面上的数字,实现无刷新效果。总结与排查
{dede:global.cfg_cmspath/} 生成的路径是正确的,浏览器能加载到 dedeajax2.js 和 digg.js。[field:goodpost/] 和 [field:badpost/] 等正确的标签。/plus/digg_ajax.php 文件可执行(通常服务器默认权限即可)。
