php博客浏览人数,在博客中实现浏览次数的统计
由于最近都在搭建自己的博客,像一些基本的功能如文章的發(fā)表,編輯等功能在之前就實(shí)現(xiàn)好了,今天主要是說(shuō)說(shuō)自己在實(shí)現(xiàn)瀏覽次數(shù)的統(tǒng)計(jì)上的解決方法。
在Laravel中,利用Eloquent的One-To-Many的關(guān)系,實(shí)現(xiàn)一篇文章有多條瀏覽記錄,具體思路如下:
用戶訪問(wèn)文章頁(yè)面-->取得ip地址和文章id,存入數(shù)據(jù)庫(kù) 再次訪問(wèn)時(shí)根據(jù)ip和文章id判斷是否新增記錄
利用weboAp/VisitorPackage可以輕松實(shí)現(xiàn),具體步驟如下:
1.在composer.json中添加weboAp/VisitorPackage:
{
"require": {
"weboap/visitor": "dev-master"
}
}
然后執(zhí)行:
composer update
將Service添加到config/app.php中:
'Weboap\Visitor\VisitorServiceProvider'
之后再執(zhí)行下面兩個(gè)命令:
php artisan vendor:publish
php artisan migrate
storage/geo/
當(dāng)然/geo是需要自己創(chuàng)建的目錄。
上面的步驟之后你將會(huì)得到一個(gè)表visitor_registry,這里我們首先為visitor_registry添加一個(gè)字段article_id用于One-To-Many的關(guān)系。
php artisan make:migration add_article_id_to_visitor_registry --table='visitor_registry'
在生成的migration大概是這樣寫(xiě):
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');
});
}
創(chuàng)建VisitorRegistry模型:
php artisan make:model VisitorRegistry
在VisitorRegistry.php中寫(xiě)上一下代碼:
protected $table = 'visitor_registry';
protected $fillable = ['clicks'];
public function articles()
{
return $this->belongsTo('App\Article');
}
上面我們通過(guò)articles()聲明了VisitorRegistry對(duì)Article的關(guān)系,于是在Article中也聲明關(guān)系:
public function visitors()
{
return $this->hasMany('App\VisitorRegistry');
}
關(guān)系修改完畢之后,由于我們?yōu)関isitor_registry表添加了article_id字段,所以我們需要修改weboAp/VisitorPackage中Visitor.php文件的log()方法,因?yàn)檫@個(gè)就是執(zhí)行插入數(shù)據(jù)的實(shí)際方法,我們首先給它闖入一額文章的id:
public function log($article_id){}
然后對(duì)log()方法里面修改第二個(gè)條件判斷:
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;
}
上面我們自己添加了一個(gè)hasArticle($article_id,$ip),我們可以直接將這個(gè)方法寫(xiě)在Visitor.php中:
public function hasArticle($id,$ip)
{
return count(VisitorRegistry::where('article_id','=',$id)->where('ip','=',$ip)->get()) > 0;
}
最后我們還要修改log()中的插入數(shù)據(jù)的數(shù)組數(shù)據(jù)$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,到這里,我們的準(zhǔn)備工作做好了,然后在ArticleController中的show($id)方法使用:
Visitor::log($id);
有了數(shù)據(jù)之后我們可以將它展示給用戶看,在展示文章的頁(yè)面寫(xiě)上類(lèi)似下面的內(nèi)容:
{{ count($article->visitors) }} 瀏覽打完收工,很開(kāi)心。
Happy Hacking
總結(jié)
以上是生活随笔為你收集整理的php博客浏览人数,在博客中实现浏览次数的统计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 康佳电视质量怎么样?
- 下一篇: php调用百度地图技术,调用百度地图