增加访问分析缓存

This commit is contained in:
2023-07-08 09:22:29 +08:00
parent f534c7c473
commit 944000ecce
6 changed files with 78 additions and 4 deletions

View File

@@ -6,6 +6,7 @@ namespace app\index\controller;
use app\model\Post as ModelPost;
use app\model\PostVisit;
use DeviceDetector\DeviceDetector;
use think\facade\Cache;
use think\facade\Db;
use think\facade\View;
@@ -45,8 +46,7 @@ class Post extends Common
$model_post->save();
$this->recordVisit($model_post->id);
$list_last_visit = PostVisit::where('post_id', $model_post->id)
->order('id desc')
->group('ip,uid')
@@ -55,6 +55,9 @@ class Post extends Common
->select();
View::assign('post', $model_post);
View::assign('list_last_visit', $list_last_visit);
$model_visit = $this->recordVisit($model_post->id);
View::assign('model_visit', $model_visit);
return View::fetch();
}
@@ -67,6 +70,37 @@ class Post extends Common
$model_visit->avatar = $this->userinfo['avatar'] ?? '';
$model_visit->nickname = $this->userinfo['nickname'] ?? '';
$model_visit->ip = $this->request->ip();
$model_visit->save();
return $model_visit;
}
public function parseVisit($visit_id)
{
$model_visit = PostVisit::find($visit_id);
$user_agent = $this->request->header('user-agent');
$dd = new DeviceDetector($user_agent);
$cache = Cache::instance();
$dd->setCache(
new \DeviceDetector\Cache\PSR16Bridge($cache)
);
$dd->parse();
$model_visit->client_bot = $dd->getBot() ?: '';
$model_visit->client = $dd->getClient();
$model_visit->client_os = $dd->getOs();
$model_visit->client_device_name = $dd->getDeviceName();
$model_visit->client_brand_name = $dd->getBrandName();
$model_visit->client_model = $dd->getModel();
$model_visit->save();
return json_message();
}
}

View File

@@ -14,6 +14,11 @@ class PostVisit extends Model
{
//
protected $json = [
'client_os',
'client',
];
public function post()
{
return $this->belongsTo(Post::class, 'post_id');
@@ -55,4 +60,21 @@ class PostVisit extends Model
return show_time_ago($value);
}
public function getClientNameAttr()
{
$client = $this->getAttr('client');
return $client->name ?? '';
}
public function getClientOsNameAttr()
{
$client_os = $this->getAttr('client_os');
$name = $client_os->name ?? '';
$version = $client_os->version ?? '';
return "$name $version";
}
}