Typecho给评论添加点赞功能,非使用插件具体效果看本博客的评论区,
functions.php 文件
在主题functions.php 文件内添加以下代码
/* 获取评论点赞数量 */
function commentLikesNum($coid, &$record = NULL)
{
$db = Typecho_Db::get();
$callback = array(
'likes' => 0,
'recording' => false
);
// 判断点赞数量字段是否存在
if (array_key_exists('likes', $data = $db->fetchRow($db->select()->from('table.comments')->where('coid = ?', $coid)))) {
// 查询出点赞数量
$callback['likes'] = $data['likes'];
} else {
// 在文章表中创建一个字段用来存储点赞数量
$db->query('ALTER TABLE `' . $db->getPrefix() . 'comments` ADD `likes` INT(10) NOT NULL DEFAULT 0;');
}
//获取记录点赞的 Cookie
//判断记录点赞的 Cookie 是否存在
if (empty($recording = Typecho_Cookie::get('__typecho_comment_likes_record'))) {
// 如果不存在就写入 Cookie
Typecho_Cookie::set('__typecho_comment_likes_record', '[]');
} else {
$callback['recording'] = is_array($record = json_decode($recording)) && in_array($coid, $record);
}
// 返回
return $callback;
/* 评论点赞处理 */
function commentLikes($archive)
{
// 状态
$archive->response->setStatus(200);
//评论id
$_POST['coid'];
/**
* 行为
* dz 进行点赞
* ct 进行踩踏
**/
$_POST['behavior'];
//判断是否为登录 true 为已经登录
$loginState = Typecho_Widget::widget('Widget_User')->hasLogin();
$res1 = commentLikesNum($_POST['coid'], $record);
$num = 0;
if(!empty($_POST['coid']) && !empty($_POST['behavior'])){
$db = Typecho_Db::get();
$prefix = $db->getPrefix();
$coid = (int)$_POST['coid'];
if (!array_key_exists('likes', $db->fetchRow($db->select()->from('table.comments')))) {
$db->query('ALTER TABLE `' . $prefix . 'comments` ADD `likes` INT(30) DEFAULT 0;');
}
//先获取当前赞
$row = $db->fetchRow($db->select('likes')->from('table.comments')->where('coid = ?', $coid));
$updateRows = $db->query($db->update('table.comments')->rows(array('likes' => (int) $row['likes'] + 1))->where('coid = ?', $coid));
if($updateRows){
$num = $row['likes'] + 1;
$state = "success";
// 添加点赞评论的 coid
array_push($record, $coid);
// 保存 Cookie
Typecho_Cookie::set('__typecho_comment_likes_record', json_encode($record));
}else{
$num = $row['likes'];
$state = "error";
}
}else{
$state = 'Illegal request';
}
//返回一个jsonv数据state数据
$archive->response->throwJson(array(
"state" => $state,
"num" => $num
));
}
如果有 themeInit($archive) 函数 ,那就添加函数内的代码
function themeInit($archive) {
// 评论点赞创建一个路由
if ($archive->request->getPathInfo() == "/getComment/dz") {
//功能处理函数 - 评论点赞
commentLikes($archive);
}
}
comments.php 文件
以下代码添加 comments.php 文件内添加
<!-- 评论点赞次数 -->
<?php
$commentLikes =commentLikesNum($comments->coid);
$commentLikesNum = $commentLikes['likes'];
$commentLikesRecording= $commentLikes['recording'];
?>
<a class="commentLikeOpt" id="commentLikeOpt-<?php $comments->coid(); ?>" href="" data-coid="<?php $comments->coid() ?>" data-recording="<?php echo $commentLikesRecording; ?>">
<i id="commentLikeI-<?php $comments->coid(); ?>" class="<?php echo $commentLikesRecording?'icon icon-38':'icon icon-65'; ?>">
<span id="commentLikeSpan-<?php $comments->coid(); ?>"><?php echo $commentLikesNum ?></span>
</i>
</a>
JS 代码
请登录后发表评论
注册
请登录后查看评论内容