首页 > 编程语言 >thinkphp3.2评论回复点赞功能

thinkphp3.2评论回复点赞功能

时间:2023-06-23 15:06:07浏览次数:40  
标签:thinkphp3.2 DB comments data content 回复 点赞 margin id

1.composer下载thinkphp3.2

composer create-project topthink/thinkphp your-project-name

2.创建数据库

CREATE TABLE `comments` (
	`id` INT ( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT,
	`content` text COLLATE utf8_unicode_ci NOT NULL,
	`user_id` INT ( 11 ) UNSIGNED NOT NULL,
	`parent_id` INT ( 11 ) UNSIGNED DEFAULT NULL,
	`likes` INT ( 11 ) NOT NULL DEFAULT '0',
	`created_at` datetime NOT NULL,
PRIMARY KEY ( `id` ) 
) ENGINE = INNODB AUTO_INCREMENT = 9 DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;

3.连接数据库

Application\Common\Conf\
<?php
return array(
	//'配置项'=>'配置值'
    //数据库配置信息
    'DB_TYPE'   => 'mysql', // 数据库类型
    'DB_HOST'   => '127.0.0.1', // 服务器地址
    'DB_NAME'   => 'comments', // 数据库名
    'DB_USER'   => 'root', // 用户名
    'DB_PWD'    => '123456', // 密码
    'DB_PORT'   => 3306, // 端口
    'DB_PARAMS' =>  array(), // 数据库连接参数
    'DB_PREFIX' => '', // 数据库表前缀
    'DB_CHARSET'=> 'utf8', // 字符集
    'DB_DEBUG'  =>  TRUE, // 数据库调试模式 开启后可以记录SQL日志
);

4.HTML页面

comments\Application\Home\View\Index\
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/layer/3.1.1/theme/default/layer.css">
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 20px;
        }

        form {
            margin-bottom: 20px;
        }

        input[type="text"],
        input[type="submit"] {
            padding: 5px;
            margin-right: 10px;
        }

        ul {
            list-style: none;
            padding: 0;
            margin: 0;
        }

        li {
            margin-bottom: 10px;
        }

        li p {
            margin: 0;
            padding: 5px;
            background-color: #f5f5f5;
            border: 1px solid #ddd;
            border-radius: 4px;
        }

        li a {
            display: inline-block;
            margin-right: 10px;
            color: #337ab7;
            text-decoration: none;
        }

        .likes {
            color: #999;
        }

        #reply-form {
            margin-top: 10px;
        }

        #reply-form input[type="text"],
        #reply-form input[type="submit"] {
            display: block;
            margin-top: 5px;
        }
    </style>
</head>
<body>
<!-- 评论表单 -->
<form action="{:U('Index/add')}" method="post">
    <input type="text" name="content" placeholder="请输入评论内容">
    <input type="submit" value="发表评论">
</form>

<!-- 评论列表 -->
<ul>
    <?php foreach ($comments as $comment): ?>
    <li>
        <p><?php echo $comment['content']; ?></p>
        <a href="#" onclick="reply(<?php echo $comment['id']; ?>)">回复</a>
        <a href="#" onclick="like(<?php echo $comment['id']; ?>)">点赞</a>
        <span class="likes">点赞数:<?php echo $comment['likes']; ?></span>
        <?php if (!empty($comment['replies'])): ?>
        <ul>
            <?php foreach ($comment['replies'] as $reply): ?>
            <li>
                <p><?php echo $reply['content']; ?></p>
                <!-- 显示更多回复 -->
            </li>
            <?php endforeach; ?>
        </ul>
        <?php endif; ?>
    </li>
    <?php endforeach; ?>
</ul>

<!-- 回复表单 -->
<div id="reply-form" style="display: none;">
    <form action="{:U('Index/addReply')}" method="post">
        <input type="hidden" name="parent_id" id="parent-id">
        <input type="text" name="content" placeholder="请输入回复内容">
        <input type="submit" value="发表回复">
    </form>
</div>
</body>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.staticfile.org/layer/3.1.1/layer.js"></script>
<script>
    // 回复评论
    function reply(parentId) {
        document.getElementById('parent-id').value = parentId;
        document.getElementById('reply-form').style.display = 'block';
    }

    // 点赞评论
    function like(commentId) {
        $.post("{:U('Index/like')}", {
            "comment_id": commentId
        }, function (data) {
            if (data.status == 1) {
                var likesSpan = $("#comment-" + commentId + " .likes");
                likesSpan.text("点赞数:" + data.likes);
                layer.msg(data.info, {
                    icon: 1
                });
                // 刷新点赞次数
                location.reload();
            } else {
                layer.msg(data.info, {
                    icon: 2
                });
            }
        }, "json");
    }
</script>
</html>

5.控制器

comments\Application\Home\Controller\IndexController.class.php
<?php
namespace Home\Controller;

use Think\Controller;

class IndexController extends Controller
{
    public function index()
    {
        $comments = M('comments')->where('parent_id IS NULL')->select();
        foreach ($comments as &$comment) {
            $comment['replies'] = M('comments')->where('parent_id = ' . $comment['id'])->select();
        }
        $this->assign('comments', $comments);
        $this->display();
    }

    public function add()
    {
        $content = I('post.content');
        $userId = 1; // 假设用户ID为1,根据实际情况获取用户ID
        $data = [
            'content' => $content,
            'user_id' => $userId,
            'created_at' => date('Y-m-d H:i:s'),
        ];
        $result = M('comments')->add($data);
        if ($result) {
            $this->success('评论成功');
        } else {
            $this->error('评论失败');
        }
    }

    public function addReply()
    {
        $content = I('post.content');
        $parentId = I('post.parent_id');
        $userId = 1; // 假设用户ID为1,根据实际情况获取用户ID
        $data = [
            'content' => $content,
            'user_id' => $userId,
            'parent_id' => $parentId,
            'created_at' => date('Y-m-d H:i:s'),
        ];
        $result = M('comments')->add($data);
        if ($result) {
            $this->success('回复成功');
        } else {
            $this->error('回复失败');
        }
    }

    public function like()
    {
        $commentId = I('post.comment_id');
        $result = M('comments')->where('id = ' . $commentId)->setInc('likes');

        if ($result) {
            $this->success('点赞成功');
        } else {
            $this->error('点赞失败');
        }
    }

}

6.完成

thinkphp3.2评论回复点赞功能_f5

标签:thinkphp3.2,DB,comments,data,content,回复,点赞,margin,id
From: https://blog.51cto.com/u_15901780/6537962

相关文章

  • 《 2023.6相对论吧吧务招募》 回复
    《2023.6相对论吧吧务招募》     https://tieba.baidu.com/p/8471521237        《我在理论物理吧发的多个楼层和回复被接连删除》      https://tieba.baidu.com/p/8035878949    。 楼主看看, 不用急着发表看法 ......
  • 《对动系异地同时无法做出有效定义》 回复
    《对动系异地同时无法做出有效定义》        https://tieba.baidu.com/p/8469784953       10楼 @血源萌新☜,我注意到了,你最近买了个超级会员,你为什么要买超级会员? 另外,@dons222今天又在反相吧叽叽歪歪说地球是南北方向运动的,  《我来跟大......
  • Java乐观锁实现文章点击量、收藏计数、点赞计数
    Java乐观锁实现文章点击量、收藏计数、点赞计数......
  • 2023小红书web端搜索采集笔记视频点赞关注评论去水印接口源码nodejs
    文章标签:前端笔记java版权声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!一、notejs接口调用方法(源码级别):获取笔记信息helpnow_get_note_by_id("笔记ID")获取当前用户信息helpnow_self_info()获取用户信息helpnow_user_info("用户ID")获取主页推......
  • 《挑战全球数学家》 回复
    《挑战全球数学家》     https://tieba.baidu.com/p/8452350505      回复 7楼 @彐卅xs ,   其实也不远,选一个领域方向,比如代数或几何,再细分的我也不知道,找几题看一看,做一做,就差不多了。 (滑稽)  主要是限制时间做比较难,不限时间的话可以慢......
  • 被夸回复模板
      ² 糟糕,被你发现了,哈哈被你发现了² 净说大实话,哈哈² 你是懂品味的² 我也觉得² 会说就多说点² 全世界都知道的事,你才想通² 果然美女说话就是好听² 浅浅开心一下~² 还不是因为跟你相处久了(这个好棒,近朱者赤嘛)² 蟹蟹² 美女都是含......
  • 智能AI辅助客服回复生成答案配置
    基于知识库以及定制化的ChatGPT,我们可以实现智能AI辅助客服人员生成回答,极大减轻客服回复压力。该场景适用于不能直接AI回复的情况,以及防止AI回复出错,需要客服人员手动修正再确认回复。效果展示针对访客咨询的问题,客服人员可以点击机器人辅助生成答案,直接展示到输入框中。配置......
  • 微信点赞测试点__肖sir__测试点整理
    微信点赞测试点功能:是否可以正常点赞,点赞完成以后是否会提示,多次点赞是否会多次提示性能:点赞完成以后是否快速提示点赞,点赞多了不会卡顿界面:该支付的功能界面是否按照UI原型图进行设计,字体的大小,颜色,布局是否一致,界面是否美观易用:点击点赞可以迅速点赞安全:陌生人是否可以点......
  • 《救命啊,这题我看了两个多小时了》 回复
    《救命啊,这题我看了两个多小时了》      https://tieba.baidu.com/p/8438659361        看了半天, 会做 第(1)题,  但 第(1)题楼主也会做。  哎呀 。 第(2)题看到楼主画的辅助线,  深受启发 。 第 (2)题和第(......
  • 《物理学的公理化》 回复
    《物理学的公理化》      https://tieba.baidu.com/p/696334465      9楼cyguilin中国数学会微信公众号上的《希尔伯特的23个数学问题》一文中说:问题6物理公理的数学处理(数学物理)希尔伯特建议用数学的公理化方法推演出全部物理学.1933年,苏联数学家柯尔......