600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > php博客浏览人数 在博客中实现浏览次数的统计

php博客浏览人数 在博客中实现浏览次数的统计

时间:2023-03-05 06:17:23

相关推荐

php博客浏览人数 在博客中实现浏览次数的统计

由于最近都在搭建自己的博客,像一些基本的功能如文章的发表,编辑等功能在之前就实现好了,今天主要是说说自己在实现浏览次数的统计上的解决方法。

在Laravel中,利用Eloquent的One-To-Many的关系,实现一篇文章有多条浏览记录,具体思路如下:

用户访问文章页面-->取得ip地址和文章id,存入数据库 再次访问时根据ip和文章id判断是否新增记录

利用weboAp/VisitorPackage可以轻松实现,具体步骤如下:

1.在composer.json中添加weboAp/VisitorPackage:

{

"require": {

"weboap/visitor": "dev-master"

}

}

然后执行:

composer update

将Service添加到config/app.php中:

'Weboap\Visitor\VisitorServiceProvider'

之后再执行下面两个命令:

php artisan vendor:publish

php artisan migrate

storage/geo/

当然/geo是需要自己创建的目录。

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

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

在生成的migration大概是这样写:

public function up()

{

Schema::table('visitor_registry', function (Blueprint $table) {

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

$table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade');

});

}

创建VisitorRegistry模型:

php artisan make:model VisitorRegistry

在VisitorRegistry.php中写上一下代码:

protected $table = 'visitor_registry';

protected $fillable = ['clicks'];

public function articles()

{

return $this->belongsTo('App\Article');

}

上面我们通过articles()声明了VisitorRegistry对Article的关系,于是在Article中也声明关系:

public function visitors()

{

return $this->hasMany('App\VisitorRegistry');

}

关系修改完毕之后,由于我们为visitor_registry表添加了article_id字段,所以我们需要修改weboAp/VisitorPackage中Visitor.php文件的log()方法,因为这个就是执行插入数据的实际方法,我们首先给它闯入一额文章的id:

public function log($article_id){}

然后对log()方法里面修改第二个条件判断:

if( $this->has( $ip ) && $this->hasArticle($article_id) )

{

//ip already exist in db.

$visitor = VisitorRegistry::where('ip','=',$ip)->where('article_id','=',$article_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('article_id','=',$id)->where('ip','=',$ip)->get()) > 0;

}

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

$data = array(

'ip' => $ip,

'country' => $country,

'clicks' => 1,

'article_id' => $article_id,

'updated_at' => c::now(),

'created_at' => c::now()

);

我们就添加'article_id' => $article_id,到这里,我们的准备工作做好了,然后在ArticleController中的show($id)方法使用:

Visitor::log($id);

有了数据之后我们可以将它展示给用户看,在展示文章的页面写上类似下面的内容:

{{ count($article->visitors) }} 浏览

打完收工,很开心。

Happy Hacking

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。