dedecms二次开发之点赞功能,点赞无需跳转页面,采用ajax无刷新效果,并且同一IP只给赞一次,可以有效防止刷赞。先看下效果图:
1、在dedecms后台的系统->SQL命令工具执行下面的SQL语句,这是在数据库的dede_archives表插入一个zan字段,这个zan字段位于weight后面:
1 | ALTER TABLE dede_archives ADD zan int(11) NOT NULL DEFAULT '0' AFTER weight; |
2、在SQL命令工具接着执行下面的语句,这个表是保存被赞的文档aid 及IP的,为了检测是否赞过的IP
1 | CREATE TABLE IF NOT EXISTS `dede_zan` ( |
2 | `id` int(11) NOT NULL AUTO_INCREMENT, |
3 | `aid` int(11) NOT NULL, |
4 | `ip` varchar(40) NOT NULL, |
6 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
3、然后在include/extend.func.php 中增加以下函数,用来获取文档被赞次数的
4 | $row = $dsql ->GetOne( "Select id,zan From dede_archives where id='" . $aid . "'" ); |
4、打开模板templets/default/article_article.htm,找到要显示点赞的位置,加入下面的代码(您也可以自定义):
1 | < a class = "article-zan" onclick = "doDigg(this)" rel = "{dede:field.id/}" href = "javascript:;" title = "赞一个 " > |
2 | < i class = "icon iconfont icon-dianzan" ></ i > |
3 | < span >{dede:field.id function="zan(@me)"/}</ span > |
5、css代码
1 | .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;} |
2 | .article-zan:hover{opacity: . 8 ;} |
3 | .article-zan i{ font-size : 25px ; color : #fff ;} |
4 | .article-zan span{ color : #fff ;} |
6、doDigg方法:
01 | function doDigg(thisObj){ |
02 | var id = thisObj.getAttribute( "rel" ); |
09 | success: function (data){ |
10 | thisObj.getElementsByTagName( 'span' )[0].innerHTML = data; |
7、新建zan.php,放到网站根目录:
02 | require_once (dirname( __FILE__ ) . "/include/common.inc.php" ); |
05 | if (!isset( $id ) || empty ( $id )) exit ; |
08 | $dsql ->SetQuery( "SELECT ip FROM dede_zan WHERE aid='" . $id . "' and ip='$ip'" ); |
10 | $count = $dsql ->GetTotalRow(); |
13 | $dsql ->ExecuteNoneQuery( "update dede_archives set zan=zan+1 where id='$id'; " ); |
14 | $dsql ->ExecuteNoneQuery( "insert into dede_zan (aid,ip) values ('$id','$ip'); " ); |
15 | $rows = $dsql ->GetOne( "Select zan from dede_archives where id='" . $id . "'" ); |
至此,您的点赞效果就做好了。
2021-01-05补充:
以上的赞有bug,原因是如果您的文章时生成的静态html文件,会发现即使赞成功了,下次打开时,赞还是0,因为你并没有更新html。我爱模板网仿照点击次数,对上面的赞进行了改进,每次点赞完后,下次进来会自动显示最新的点赞数:
1、在网站根目录新建zancount.php,写入下面的代码:
2 | require_once (dirname( __FILE__ ) . "/include/common.inc.php" ); |
3 | $rows = $dsql ->GetOne( "Select zan from dede_archives where id='{$aid}'" ); |
2、在显示赞的位置,也就是上面的第四步,改为下面的代码:
1 | < a class = "article-zan" onclick = "doDigg(this)" rel = "{dede:field.id/}" href = "javascript:;" title = "赞一个 " > |
2 | < i class = "icon iconfont icon-dianzan" ></ i > |
3 | < span >< script type = "text/javascript" src = "/zancount.php?aid={dede:field.id/}" ></ script ></ span > |