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. dumu 来自浙江省杭州市移动 访客 头像

      中秋快乐哦

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

        同乐同乐呀

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

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

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

        彻底删除!!!

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

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

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

        改进中 表情

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

      特地点赞一下。

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

      学习学习

      9月22日