• 博主:孽 (云趣科技)
  • QQ:点击这里给我发消息
  • 微信:dylanv
  • 业务:切图,建站,二开,运维
文章目录

用留言功能实现PbootCms文章评论

用留言功能实现PbootCms文章评论
稿件作者 CMS博客 2020-06-23 20:30 PbootCMS教程 4875
点击购买 ( ¥ 5.00 )

前言

废话不多说,今天上一个用PbootCms留言板实现文章留言的功能。

操作思路

给留言板添加字段,例如叫:articleid

然后在文章下面加入留言表单。

在表单中增加一个隐藏字段:

<!--用来记录文章的ID-->
<input type="hidden" value="{content:id}" name="articleid">

如果不需要在文章下显示评论,到这里就结束啦。还可以多加几个隐藏字段,记录文章标题,文章URL,方便查看。

那教程肯定不能这么没营养了。

我们使用message标签加载留言列表的时候,会把所有的留言都加载出来,再加上一个判断articleid=={content:id},就实现了评论列表读取。这个方法有个严重的BUG,就是分页会不准确。可能出现1页都没一条评论的情况。

优化方案

那么我们需要对message标签进行一个优化,来更好的实现评论列表效果。

优化后的message标签如下,通过filter属性来过滤出我们所需的留言(评论)。

{pboot:message num=10 filter=articleid|{content:id} page=1}
{/pboot:message}

修改文件位置1:/apps/home/controller/ParserController.php,大约在1866行,找到parserMessageLabel方法

为了突出重点,代码仅贴了主要部分,看我的注释@cms88,小朋友请自行整合。

    // 解析留言板标签
    public function parserMessageLabel($content)
    {
        $pattern = '/\{pboot:message(\s+[^}]+)?\}([\s\S]*?)\{\/pboot:message\}/';
        $pattern2 = '/\[message:([\w]+)(\s+[^]]+)?\]/';
        if (preg_match_all($pattern, $content, $matches)) {
            $count = count($matches[0]);
            for ($i = 0; $i < $count; $i ++) {
                // 获取调节参数
                $params = $this->parserParam($matches[1][$i]);
                $num = $this->config('pagesize');
                $page = true;
                $start = 1;
                $lg = '';
                $filter = '';
                
                foreach ($params as $key => $value) {
                    ......
                }
                
                // 起始数校验
                if (! is_numeric($start) || $start < 1) {
                    $start = 1;
                }

                // filter数据筛选 @cms88
                $where = array();
                if ($filter) {
                    $filter = explode('|', $filter);
                    $where = $filter[0] . "='" . escape_string($filter[1]) . "'";
                }
                
                // 读取数据 @cms88
                if (! $data = $this->model->getMessage(escape_string($num), $page, $start, $lg, $where)) {
                    $content = str_replace($matches[0][$i], '', $content);
                    continue;
                }
                
                // 匹配到内部标签
                if (preg_match_all($pattern2, $matches[2][$i], $matches2)) {
                    $count2 = count($matches2[0]); // 循环内的内容标签数量
                } else {
                    $count2 = 0;
                }
                
                $out_html = '';
                $key = 1;
                foreach ($data as $value) { // 按查询数据条数循环
                    ......
                }
                $content = str_replace($matches[0][$i], $out_html, $content);
            }
        }
        return $content;
    }

修改位置2:/apps/home/model/ParserModel.php,大约在723行,getMessage方法。

// 获取留言
    public function getMessage($num, $page = true, $start = 1, $lg = null, $filter = null)   //@cms88 增加filter
    {
        if ($lg == 'all') {
            $where = array();
        } elseif ($lg) {
            $where = array(
                'acode' => $lg
            );
        } else {
            $where = array(
                'acode' => get_lg()
            );
        }
        if ($page) {
            return parent::table('ay_message')->where("status=1")
                ->where($where)
                ->where($filter, 'OR')
                ->order('id DESC')
                ->decode(false)
                ->page(1, $num, $start)
                ->select();
        } else {
            return parent::table('ay_message')->where("status=1")
                ->where($where)
                ->where($filter, 'OR')
                ->order('id DESC')
                ->decode(false)
                ->limit($start - 1, $num)
                ->select();
        }
    }

至此,功能实现。学会的同学点个赞呗。

代码下载

优化部分代码已经全部给出,想要偷懒的小朋友可以直接购买代码包。基于PbootCms v2.0.8制作。有需要的同学可以自行对比文件学习代码。


获取方式

本站插件,无特别说明,均会在官方发布新版后的两周内同步发布更新包。请务必在有更新包的情况下再进行在线升级操作。
  1. 价格:RMB 5.00 元
  2. 购买流程:微信扫小程序码->立即购买->付款成功->获取到下载地址;
  3. 购买成功后扫码登陆PC端会员中心->我的订单,可以查看下载地址以及使用手册。
  4. 您可以私下分享该代码,但是请不要在网络上发布;
  5. 下载该代码并不代表我们可以无条件的为您解决问题,请先认真阅读操作手册;
  6. 如果遇到代码BUG,请鞭笞博主进行修复并更新。
扫码购买
扫码购买[IOS暂不支持]
首先给无法用IOS扫码支付的用户道个歉:对不起。小站经营几年来,也算是历经坎坷,从早期的被DDos,然后被PB圈内人举报网站含有在线支付,服务商一刀切要求下架。随后本站上架了微信小程序商城,经历了小程序内1毛钱支付测试订单,被恶意投诉。这次又被举报小程序含有ios端支付。一路走来,一直被针对,我感谢那些针对我的人,是你们让我一步步的走向合规之路。

联系客服

请使用QQ扫码
请使用微信扫码
回复时间:工作日下午4点30以后;周六周日不限。
  • 分享:

文章评论(审核通过可见)

说点什么
共有1条评论

匿名用户

  • 2022-02-11 19:32:11
  • Windows 10
后台文件需要修改吗,后台不显示留言

CMS博客

  • 2022-05-31 23:05:15
这个看你的业务需求进行修改。