由于网上参考的两篇文章讲的不是特别适合自己,在下载和开发的过程中遇到不少的坑,所以就在前辈的基础上进行整理知识点。

参考1-在博客中实现浏览次数的统计-laravist

参考2-Laravel 文章浏览数统计 (VisitorRegistry)-PJBlog

浏览量统计的需求
用户访问文章页面–>取得ip地址和文章id,存入数据库 再次访问时根据ip和文章id判断是否新增记录

扩展工具:weboAp/Visitor。


首先要用composer 加载weboAp/Visitor

  1. 在composer.json的require中添加,注意标点符号的遗漏和错误
 {"require": {"weboap/visitor": "dev-master"}
}

2.然后在命令行执行 composer update ,我使用的是 PhpStorm ,所以可以用 alt+F12 调出命令行,输入即可。

3.将Service添加到 config/app.phpproviders中,同样注意标点符号的遗漏和错误:

'Weboap\Visitor\VisitorServiceProvider'

4.之后在命令行(phpstorm->ALT+F12)里执行下面两个命令:

php artisan vendor:publishphp artisan migrate

5.到 http://dev.maxmind.com/geoip/geoip2/geolite2“>http://dev.maxmind.com/geoip/geoip2/geolite2 下载geoip包(GeoLite2-City.mmdb),如果找不到,就到我放在CSDN的资源下载 geolite2CSDN下载地址将它解压之后放到以下目录, geo 文件夹 需要自己创建的

storage/geo/

6.上面的步骤之后你将会得到一个表 visitor_registry,这里我们首先为 visitor_registry 添加一个字段 art_id 用于 One-To-Many 的关系

php artisan make:migration add_art_id_to_visitor_registry --table='visitor_registry'

7.在项目的 database 文件夹找到新生成的表格,名字是

日期+add_article_id_to_visitor_registry

在里面的up方法中写入

public function up()
{
Schema::table('visitor_registry', function (Blueprint $table) {
$table->integer('art_id')->unsigned()->index();
$table->foreign('art_id')->references('id')->on('article')->onDelete('cascade');
});
}

这边就是我遇到的坑之一,
首先

$table->integer('art_id')->unsigned()->index();

art_id是你文章表格的 id 列名
这边是在 visitor_registry 添加字段. 用于添加外键使用的
所以这边改成你需要的属性


$table->foreign('art_id')->references('id')->on('article')->onDelete('cascade');

这边是 visitor_registry 与你的表格添加外键.

这边也有一个坑,就是死活都无法添加进外键,

大概是这样↓↓↓好吧,我承认我暴走了= =翻来翻去找不到答案,

然后我就去睡了一觉,起来以后再翻翻stackoverflow,然后就解决了.

  1. 可能是你代码打错了,检查一下.

  2. 可能是主表的键没有设置无符号,这是国外友人提的,并被那个问主采纳了,那你就看看两个表的外键属性是否一致

  3. 最后这是我遇到的原因,大概是咸丰年前(其实就一个星期前),我开发博客系统的时候,把表格的引擎都改成了MyISAM ,而通过 migrate 生成的表格是默认InnoDB ,所以,它!就!添!加!不!成!功!

  4. 如果还不能解决,那我也没办法帮你了,科学上网,翻墙后出去大型基佬聚会会所stackoverflow看看

8.运行

php artisan migrate

9.接下来添加模型,

php artisan make:model VisitorRegistry

10.再接下来是在模型里面添加

protected $table = 'visitor_registry';protected $fillable = ['clicks'];
public function articles()
{return $this->belongsTo('App\Article');
}

11.再接下来就在你要计算浏览数的那个模型,也就是文章展示的模型中添加一对多的关系

public function visitors(){return $this->hasMany('App\VisitorRegistry');}

12.我们在第7步中给原先的表格添加了一个属性,所以我们需要修改原来扩展包里面的log()方法

在方法中添加参数public function log($art_id){}

在修改第二个If语句

if( $this->has( $ip ) && $this->hasArticle($art_id,$ip) ){//ip already exist in db.$visitor = VisitorRegistry::where('ip','=',$ip)->where('art_id','=',$art_id)->first();$visitor->update(['clicks'=>$visitor->clicks + 1]);return true;}

上面我们自己添加了一个 hasArticle($article_id,$ip),我们可以直接将这个方法写在 Visitor.php 中:

public function hasArticle($id,$ip){return count(VisitorRegistry::where('art_id','=',$id)->where('ip','=',$ip)->get()) > 0;}

最后我们还要修改log()中的插入数据的数组数据$data

$data = array('ip'        => $ip,'country'   => $country,'clicks'    => 1,'art_id' => $art_id,'updated_at'    => c::now(),'created_at'    => c::now());

完整的方法是:

  public function log($art_id){$ip = $this->ip->get();if (!$this->ip->isValid($ip)) {return;}if ($this->has( $ip ) && $this->hasArticle($art_id,$ip) ) {//ip already exist in db.$visitor = VisitorRegistry::where('ip','=',$ip)->where('art_id','=',$art_id)->first();$visitor->update(['clicks'=>$visitor->clicks + 1]);return true;} else {$geo = $this->geo->locate($ip);$country = array_key_exists('country_code', $geo) ? $geo['country_code'] : null;//ip doesnt exist  in db$data = ['ip'        => $ip,'country'   => $country,'clicks'    => 1,'art_id' => $art_id,'updated_at'    => c::now(),'created_at'    => c::now()];$this->storage->create($data);}// Clear the database cache$this->cache->destroy('weboap.visitor');}

好了,super 完美.

博客实现浏览量统计次数相关推荐

  1. 开发 Django 博客文章阅读量统计功能

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 如何精确地记录一篇文章的阅读量是一个比较复杂的问题,不过对于我们的博客来说,没有必要 ...

  2. Diango博客--12.开发 Django 博客文章阅读量统计功能

    文章目录 0.models中增加新字段 1.models中增加方法 2.迁移数据库 3.修改视图函数 4.在模板中显示阅读量 0.models中增加新字段 为了记录文章的浏览量,需要在文章的数据库表中 ...

  3. Python 爬取51cto博客标题浏览量、评论量、收藏

    介绍 提到爬虫,互联网的朋友应该都不陌生,现在使用Python爬取网站数据是非常常见的手段,好多朋友都是爬取豆瓣信息为案例,我不想重复,就使用了爬取51cto博客网站信息为案例,这里以我的博客页面为教 ...

  4. hexo大家博客时浏览量和访客量异常

    使用hexo s部署在本地预览效果的时候,uv数和pv数会过大,这是由于不蒜子用户使用一个存储空间,所以使用localhost:4000进行本地预览的时候会导致数字异常,这是正常现象,只需要将博客部署 ...

  5. 爆肝写的博客,浏览量还是两位数!

    干货笔记

  6. Python爬虫获取文章的标题及你的博客的阅读量,评论量。所有数据写入本地记事本。最后输出你的总阅读量!

    Python爬虫获取文章的标题及你的博客的阅读量,评论量.所有数据写入本地记事本.最后输出你的总阅读量!还可以进行筛选输出!比如阅读量大于1000,之类的! 完整代码在最后.依据阅读数量进行降序输出! ...

  7. 为你的CSDN博客添加CNZZ流量统计功能

    一.流量统计介绍 流量统计是指通过各种科学的方式,准确的纪录来访某一页面的访问者的流量信息,目前而言,必须具备可以统计. 1.简介 统计独立的访问者数量(独立用户.独立访客): 可以统计独立的IP地址 ...

  8. 自建站的博客网站添加百度统计功能统计流量

    有了自己的网站后,想要知道自己网站的访问情况怎么办,有两种方法,一种是自己写代码进行ip地址获取并解析IP地址来源从而得到IP地址属地,进一步进行统计.另一种方法就是使用现有的统计工具,我这里使用的是 ...

  9. 如何给博客园添加访问统计

    昨天无意中看到别人博客中有访问人数统计这一项,觉得很有意思,便度娘学习之,终成.如图(上面黑色栏): 作为一名编程小白,还是有点小开心,跟大家分享一下. 1.http://statcounter.co ...

  10. 用Github Pages+Hexo搭建博客之(八)Hexo博客Next主题添加统计文章阅读量(访问量/浏览量/阅读次数)功能

    [置顶][专栏]用Github Pages+Hexo搭建博客 文章目录 [置顶][专栏][用Github Pages+Hexo搭建博客](https://blog.csdn.net/qq_342439 ...

最新文章

  1. 计算机及Linux基础简介
  2. FishEye for Silverlight
  3. 浅析epoll-为何多路复用I/O要使用epoll
  4. 1024电商项目的邮箱验证码与图形验证码功能模块
  5. 上帝就在机器里:复杂算法背后隐藏的可怕现实
  6. 容器中apscheduler不执行_APScheduler:定时任务框架
  7. Matlab线性/非线性规划优化算法(7)
  8. 数据库流行度7月排行榜:Oracle 和 MySQL 暴跌创历史新低
  9. (干货)css常用技巧
  10. Fragment-传递参数
  11. php 依赖注入 数据库切换_通俗易懂理解PHP依赖注入容器
  12. 好用的MARKDOWN编辑器一览
  13. 智头条:小米第二家汽车公司成立; 华为发布7款智慧生活新品;萤石视频锁携手电影《门锁》今日上映
  14. 计算机论文的字体要求,论文格式要求及字体大小
  15. python实现下载韩寒博客中的所有文章,在本地存储
  16. 魔兽8.0最新服务器人口普查,魔兽世界8.2最新人口普查 2019各服务器人口普查信息汇总...
  17. VBA工程加密,工程不可查看加密
  18. ubuntu18.04 分辨率突然变小,添加1920x1080分辨率,转完变卡默认成集显llvmpipe改独显方法
  19. dubbo-admin2.5.4监控中心下载
  20. HLOJ 2026 猴子吃桃

热门文章

  1. C语言有哪些冷知识?
  2. Ynoi(5/35)
  3. 苹果手机通过iCloud导出通讯录导入到安卓手机 教程
  4. 1 -- > PCI / PCIe 配置空间详解
  5. WRF-Chem笔记——MOZBC边界场制作
  6. Windows命令行解决8080端口被占用
  7. 图像融合初步认识--homesite of oliver rockinger主页内容
  8. VR,“看房”容易“卖房”难
  9. c语言中合法的字符型常量是,字符串变量是什么意思
  10. 基于Auto.js的淘宝抢购助手+京东双十一活动助手。亲测运行正常!