“织梦顶一下”功能是DedeCMS(织梦内容管理系统)中常见的用户互动模块,允许访客对文章或内容进行点赞支持,通过调用该功能可以有效提升网站的用户参与度和内容活跃度,对增强用户体验、引导用户行为具有积极作用,以下从功能原理、调用方法、参数配置、注意事项及应用场景等方面进行详细说明,帮助网站管理员正确实现并优化该功能。

“顶一下”功能的核心是通过数据库记录用户对内容的点赞行为,前端页面通过调用接口实时显示点赞数量,并支持用户点击提交点赞数据,其作用主要体现在:
织梦系统中,“顶一下”功能的调用主要通过模板标签和数据库交互实现,具体步骤如下:
默认情况下,织梦的“顶一下”功能依赖dede_stow数据表(存储点赞记录),表结构包含以下关键字段:
id:主键,自增ID; aid:关联的文章ID; ip:点赞用户的IP地址(用于防重复提交); dtime:点赞时间。CREATE TABLE `dede_stow` ( `id` int(11) NOT NULL auto_increment, `aid` int(11) NOT NULL default '0', `ip` varchar(20) NOT NULL default '', `dtime` int(11) NOT NULL default '0', PRIMARY KEY (`id`), KEY `aid` (`aid`), KEY `ip` (`ip`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
在织梦模板文件(如文章详情页article_article.htm)中,可通过以下标签实现“顶一下”功能的前端显示和调用:

<div class="digg">
<div class="diggbox digg_good" onclick="JavaScript:postDigg('good',{dede:field.id/})">
<a href="javascript:;" class="digg_link">顶一下</a>
<span class="digg_num">{dede:field.goodpost/}</span>
<span class="digg_percent">({dede:field.goodper/}%)</span>
</div>
<div class="diggbox digg_bad" onclick="JavaScript:postDigg('bad',{dede:field.id/})">
<a href="javascript:;" class="digg_link">踩一下</a>
<span class="digg_num">{dede:field.badpost/}</span>
<span class="digg_percent">({dede:field.badper/}%)</span>
</div>
</div>
{dede:field.goodpost/}:显示当前文章的点赞总数; {dede:field.goodper/}:显示点赞占比(需配合后端计算); {dede:field.id/}:当前文章ID,用于关联点赞数据。 在模板文件中需引入织梦自带的JS交互脚本(通常位于/include/dedeajax2.js),实现点击提交和局部刷新:
<script type="text/javascript" src="{dede:global.cfg_cmspath/}/include/dedeajax2.js"></script>
<script>
function postDigg(ftype,aid){
var taget_obj = document.getElementById('newdigg');
var saveid = GetCookie('diggid');
if(saveid != null){
var saveids = saveid.split(',');
var hasid = false;
for(i=0;i<saveids.length;i++){
if(saveids[i]==aid && hasid==false){ hasid = true; }
}
if(hasid){ alert('您已经顶过了哦!'); return false; }
}
var url = "{dede:global.cfg_cmspath/}/plus/digg_ajax.php?action="+ftype+"&id="+aid;
var myajax = new DedeAjax(taget_obj,false,false,'','','');
myajax.SendGet2(url);
DedeXHTTP = null;
}
</script>
点赞提交的核心逻辑由/plus/digg_ajax.php文件处理,该文件接收前端传递的action(good/bad)和id(文章ID),通过以下步骤完成数据处理:
diggid),同一IP/用户在登录状态下(织梦可关联会员系统)限制重复点赞; dede_stow表插入点赞记录,同时更新文章表dede_archives中的scores(积分)或自定义点赞字段(需提前配置); 通过CSS调整“顶一下”按钮的样式,
.diggbox {
float: left;
width: 60px;
height: 60px;
border: 1px solid #ddd;
margin-right: 10px;
text-align: center;
cursor: pointer;
}
.diggbox a.digg_link {
display: block;
padding-top: 10px;
color: #333;
text-decoration: none;
}
.diggbox span.digg_num {
display: block;
font-size: 20px;
font-weight: bold;
color: #f60;
}
织梦默认通过Cookie限制同一设备24小时内重复点赞,若需升级为IP+会员双限制,可修改digg_ajax.php中的验证逻辑,

// 检查会员登录状态(需开启会员功能)
if($cfg_ml->IsLogin()){
$mid = $cfg_ml->M_ID;
$row = $dsql->GetOne("SELECT * FROM `dede_stow` WHERE aid='$aid' AND mid='$mid'");
if($row) die('您已经顶过了哦!');
}
// 检查IP限制
$ip = GetIP();
$row = $dsql->GetOne("SELECT * FROM `dede_stow` WHERE aid='$aid' AND ip='$ip'");
if($row) die('您已经顶过了哦!');
若需在列表页或首页显示文章点赞数,可通过自定义SQL标签实现,例如在列表模板list_article.htm中添加:
{dede:sql sql="SELECT COUNT(*) as diggCount FROM dede_stow WHERE aid=~id~"}
点赞数:[field:diggCount/]
{/dede:sql}
防刷机制:
digg_ajax.php判断当日IP点赞数量,超限则拒绝); 性能优化:
dede_stow表,可通过定时任务将点赞数同步到文章表的缓存字段(如click或自定义goodpost),减少数据库压力; 用户体验:
数据安全:
aid参数进行过滤,防止SQL注入(织梦默认已做基础处理,但建议二次验证); dede_stow表中的过期数据(如按月清理历史记录),避免表过大影响查询效率。