Typeho 评论点赞功能(非插件)

转载 2023-09-22 00:27 上海
文章的分类 技术教程

PIC_1695314173125.png

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 代码

隐藏内容,需要留言后方可查看



THE END


分享
赞赏
精选留言 写留言
    1. 林厌 来自中国福建省莆田市仙游县 访客 头像

      表情 看看js内容

      7月4日
    1. 李子墨 来自中国广东省深圳市福田区 访客 头像

      感谢大佬

      6月14日
    1. dumu 来自浙江省杭州市移动 访客 头像

      中秋快乐哦

      2023年10月01日
      1. 小魏先生 来自上海市鹏博士宽带 作者 头像
        @dumu

        同乐同乐呀

        2023年10月01日
    1. 小赵同学 来自中国广东省 访客 头像

      终于不用输验证码了 表情 表情

      2023年09月30日
      1. 小魏先生 来自上海市鹏博士宽带 作者 头像
        @小赵同学

        彻底删除!!!

        2023年10月01日
    1. 威言威语 来自上海市闵行区电信 访客 头像

      页面提示都是弹窗型的,用着怪难受的。

      2023年09月26日
      1. 小魏先生 来自上海市电信 作者 头像
        @威言威语

        改进中 表情

        2023年09月26日
    1. 威言威语 来自上海市闵行区电信 访客 头像

      特地点赞一下。

      2023年09月26日
    1. 锟斤拷 来自中国安徽省亳州市谯城区 访客 头像

      学习学习

      2023年09月22日