在撰写本文时,PbootCMS的版本为V2.0.7。

 

PbootCMS模板系统默认提供了点赞和反对的功能链接:

{content:likeslink} 用于点赞功能。

{content:opposelink} 用于反对功能。

点击这些链接后,页面会刷新一次,同时{content:likes}{content:oppose}的数值会增加1。然而,这种效果显得有些生硬,因为一个小功能却需要整个页面刷新,用户体验不佳,因此我们决定对其进行优化。

 

在深入研究的过程中,我发现PbootCMS已经内置了相关的API接口。虽然官方文档中并未提及这些接口,但我们仍然可以利用它们来实现更流畅的效果。

以下是两个主要的API接口:

点赞链接:http://IP/api.php/do/likes/id/* // 这里需要传递文章ID,即{content:id}。

反对链接:http://IP/api.php/do/oppose/id/* // 同样需要传递文章ID,即{content:id}。

接下来,我们将通过一个示例来展示如何使用这些接口进行点赞操作。


$(document).ready(function (e) {
  var url = '/api.php/do/likes/id/' + {content:id};
  $.ajax({
    type: 'POST',
    url: url,
    dataType: 'json',
    data: {
      appid: '{pboot:appid}',
      timestamp: '{pboot:timestamp}',
      signature: '{pboot:signature}'
     },
    success: function (response, status) {
      if(response.code){
        // 获取数据成功
        // 此处对页面已显示的{content:likes}加1,注意JS中需要转换为数字才能进行加法运算,否则会是字符串拼接。
        alert(response.data);
      }else{
        // 返回错误数据
        alert(response.data);
      }
    },
    error:function(xhr,status,error){
      // 返回数据异常
      alert('返回数据异常!');
    }
  });
});
    

但是,这样设置会导致用户可以无限点赞,完全没有限制。我们需要调整逻辑,使其与传统的页面刷新效果一致,即一天只能点赞一次。

为了实现这一目标,我们需要对API接口进行一些优化。具体来说,需要修改以下文件:

文件路径:apps/api/controller/DoController.php

大约在第24行,可以根据注释找到相关代码。以下是优化后的点赞功能代码示例:


// 点赞
public function likes()
{
    if (! ! $id = request('id', 'int')) {
        if(! cookie('likes_' . $id)){
            $this->model->addLikes($id);
            cookie('likes_' . $id, true, 86400, null, null, null, null);
            json(1, '点赞成功');
        }else{
            json(0, '24小时内只能点赞一次哦!');
        }
    } else {
        json(0, '点赞失败');
    }
}
    

至此,我们已经成功实现了每天只能点赞一次的功能优化。这不仅提升了用户体验,也确保了系统的公平性。