EMLOG非插件实现用户点赞

这个功能和文章点赞是一样的原理,只不过换个数据表而已。

只不过把点赞数量写进用户的user数据表而已。

因板子需求,所以就改了一下这个功能,顺带记录一下。

module文件

//用户点赞
function dianzhan(){
 $DB = Database::getInstance();
 if($DB->num_rows($DB->query("show columns from ".DB_PREFIX."user like 'dianzan'")) == 0){
 $sql = "ALTER TABLE ".DB_PREFIX."user ADD dianzan int unsigned NOT NULL DEFAULT '0'";
 $DB->query($sql);
 }
}
dianzhan();
function dzdate($uid){
 $uid = intval($_POST['id']);
 $DB = Database::getInstance();
 $DB->query("UPDATE " . DB_PREFIX . "user SET dianzan=dianzan+1 WHERE uid=$uid");
 setcookie('dianzanpd_'. $uid, 'true', time() + 31536000);
}
function umzan(){
 if( @$_POST['plugin'] == 'dianzanpd' &&@$_POST['action'] == 'dianzan' &&isset($_POST['id'])){
 $id = intval($_POST['id']);
 header("Access-Control-Allow-Origin: *");
 dzdate($id);echo getum($id);die;
 }
}
umzan();
function getum($id){
 static $arr = array();
 $DB = Database::getInstance();
 if(isset($arr[$uid])) return $arr[$uid];
 $sql = "SELECT dianzan FROM " . DB_PREFIX . "user WHERE uid=$id";
 $res = $DB->query($sql);
 $row = $DB->fetch_array($res);
 $arr[$id] = intval($row['dianzan']);
 return $arr[$id];
}

调用方式

<a href="javascript:;" id="dianzan" data-dianzanpd="<?php echo $userData['uid'];?>" title="点赞"><span class="fa fa-thumbs-o-up"></span><i><?php echo(isset($userData['dianzan'])?$userData['dianzan']:getum($userData['uid']));?></i></a>

JS代码

//用户点赞
$(document).on('click','#dianzan',function(){var a=$(this),id=a.data('dianzanpd');if(dianzanpd_check(id)){alert('已点赞!');}else{$(this).addClass('current');$.post('',{plugin:'dianzanpd',action:'dianzan',id:id},function(b){a.find('i').html(b)})}});
function dianzanpd_check(id){return new RegExp('dianzanpd_'+id+'=true').test(document.cookie)}
$('[data-dianzanpd]').each(function(){var a=$(this),id=a.data('dianzanpd');if(dianzanpd_check(id)){dianzanpd_(a)}else{a.attr('title','点赞')}});
function dianzanpd_(a){a.css('current')}
function btn_click(btn,on,off){flag=true;$(btn).click(function(){$(btn).prop('class',(flag=!flag)?on:off)})}!
function(){$('[data-dianzanpd]').each(function(){var a=$(this),id=a.data('dianzanpd');if(dianzanpd_check(id)){$(this).addClass('current')}})}();
function menu_click(a,b,d){flag=!0;if(a=document.getElementById(a))a.onclick=function(){a.setAttribute("class",(flag=!flag)?b:d)}}

PS:

这里说明一下,FLY主题用户,Meta主题用户可以按照流程放入代码可直接使用。

其他主题的话,可能要略做修改。
1 条回复A管理员Y会员M游客