1、在dedecms后台的系统->SQL命令工具执行下面的SQL语句,这是在数据库的dede_archives表插入一个zan字段,这个zan字段位于weight后面:
ALTER TABLE dede_archives ADD zan int(11) NOT NULL DEFAULT '0' AFTER weight;2、在SQL命令工具接着执行下面的语句,这个表是保存被赞的文档aid 及IP的,为了检测是否赞过的IP
CREATE TABLE IF NOT EXISTS `dede_zan` ( `id` int(11) NOT NULL AUTO_INCREMENT, `aid` int(11) NOT NULL, `ip` varchar(40) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf83、然后在include/extend.func.php 中增加以下函数,用来获取文档被赞次数的
function zan($aid) { global $dsql; $row = $dsql->GetOne("Select id,zan From dede_archives where id='".$aid."'"); return $row['zan']; }4、打开模板templets/default/article_article.htm,找到要显示点赞的位置,加入下面的代码(您也可以自定义):
<a class="article-zan" onclick="doDigg(this)" rel="{dede:field.id/}" href="javascript:;" title="赞一个 "> <i class="icon iconfont icon-dianzan"></i> <span>{dede:field.id function="zan(@me)"/}</span> </a>5、css代码
.article-zan{width: 118px; height: 72px; padding-top: 15px; position: relative; display: -webkit-box; display: -ms-flexbox; display: flex; flex-flow: column; -webkit-box-align: center; -ms-flex-align: center; align-items: center; background-color: #0098d7; margin:30px auto; border-radius: 50px; cursor: pointer; -webkit-box-sizing: border-box; box-sizing: border-box;} .article-zan:hover{opacity: .8;} .article-zan i{font-size: 25px; color: #fff;} .article-zan span{color: #fff;}6、doDigg方法:
function doDigg(thisObj){ var id = thisObj.getAttribute("rel"); //ajax无刷新点赞 $.ajax({ type:"POST", url:"/zan.php", data:"id="+id, cache:false, //不缓存此页面 success:function(data){ thisObj.getElementsByTagName('span')[0].innerHTML = data; } }); }7、新建zan.php,放到网站根目录:
<?php require_once (dirname(__FILE__) . "/include/common.inc.php"); $ip =getip(); //获取用户IP $id = $_POST['id']; if(!isset($id) || empty($id)) exit; //查询已赞过的IP $dsql->SetQuery("SELECT ip FROM dede_zan WHERE aid='".$id."' and ip='$ip'"); $dsql->Execute(); $count = $dsql->GetTotalRow(); if($count==0){ //如果没有记录 $dsql->ExecuteNoneQuery("update dede_archives set zan=zan+1 where id='$id'; ");//写入赞数 $dsql->ExecuteNoneQuery("insert into dede_zan (aid,ip) values ('$id','$ip'); ");//写入IP,及被赞的AID $rows = $dsql->GetOne("Select zan from dede_archives where id='".$id."'");//获取被赞的数量 $zan = $rows['zan']; //获取赞数值 echo $zan; }else{ echo "赞过了.."; }至此,您的点赞效果就做好了。
2021-01-05补充:
以上的赞有bug,原因是如果您的文章时生成的静态html文件,会发现即使赞成功了,下次打开时,赞还是0,因为你并没有更新html。我爱模板网仿照点击次数,对上面的赞进行了改进,每次点赞完后,下次进来会自动显示最新的点赞数:
1、在网站根目录新建zancount.php,写入下面的代码:
document.write("<?php require_once (dirname(__FILE__) . "/include/common.inc.php"); $rows = $dsql->GetOne("Select zan from dede_archives where id='{$aid}'"); $zan = $rows['zan']; //获取赞数值 echo $zan; ?>");2、在显示赞的位置,也就是上面的第四步,改为下面的代码:
<a class="article-zan" onclick="doDigg(this)" rel="{dede:field.id/}" href="javascript:;" title="赞一个 "> <i class="icon iconfont icon-dianzan"></i> <span><script type="text/javascript" src="/zancount.php?aid={dede:field.id/}"></script></span> </a>