增加访问分析缓存

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\Post as ModelPost;
use app\model\PostVisit; use app\model\PostVisit;
use DeviceDetector\DeviceDetector;
use think\facade\Cache; use think\facade\Cache;
use think\facade\Db; use think\facade\Db;
use think\facade\View; use think\facade\View;
@@ -45,7 +46,6 @@ class Post extends Common
$model_post->save(); $model_post->save();
$this->recordVisit($model_post->id);
$list_last_visit = PostVisit::where('post_id', $model_post->id) $list_last_visit = PostVisit::where('post_id', $model_post->id)
->order('id desc') ->order('id desc')
@@ -56,6 +56,9 @@ class Post extends Common
View::assign('post', $model_post); View::assign('post', $model_post);
View::assign('list_last_visit', $list_last_visit); View::assign('list_last_visit', $list_last_visit);
$model_visit = $this->recordVisit($model_post->id);
View::assign('model_visit', $model_visit);
return View::fetch(); return View::fetch();
} }
@@ -67,6 +70,37 @@ class Post extends Common
$model_visit->avatar = $this->userinfo['avatar'] ?? ''; $model_visit->avatar = $this->userinfo['avatar'] ?? '';
$model_visit->nickname = $this->userinfo['nickname'] ?? ''; $model_visit->nickname = $this->userinfo['nickname'] ?? '';
$model_visit->ip = $this->request->ip(); $model_visit->ip = $this->request->ip();
$model_visit->save(); $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() public function post()
{ {
return $this->belongsTo(Post::class, 'post_id'); return $this->belongsTo(Post::class, 'post_id');
@@ -55,4 +60,21 @@ class PostVisit extends Model
return show_time_ago($value); 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";
}
} }

View File

@@ -31,7 +31,8 @@
"jaeger/phpquery-single": "^1.1", "jaeger/phpquery-single": "^1.1",
"league/html-to-markdown": "^5.1", "league/html-to-markdown": "^5.1",
"topthink/think-filesystem": "^2.0", "topthink/think-filesystem": "^2.0",
"mibe/feedwriter": "^1.1" "mibe/feedwriter": "^1.1",
"matomo/device-detector": "^6.1"
}, },
"require-dev": { "require-dev": {
"symfony/var-dumper": "^4.2" "symfony/var-dumper": "^4.2"

View File

@@ -1,6 +1,7 @@
<?php <?php
use app\common\ColumnFormat; use app\common\ColumnFormat;
use think\migration\db\Column;
use think\migration\Migrator; use think\migration\Migrator;
class CreateTablePostVisit extends Migrator class CreateTablePostVisit extends Migrator
@@ -37,6 +38,12 @@ class CreateTablePostVisit extends Migrator
$table->addColumn(ColumnFormat::stringNormal('uid')); $table->addColumn(ColumnFormat::stringNormal('uid'));
$table->addColumn(ColumnFormat::stringNormal('nickname')); $table->addColumn(ColumnFormat::stringNormal('nickname'));
$table->addColumn(ColumnFormat::stringUrl('avatar')); $table->addColumn(ColumnFormat::stringUrl('avatar'));
$table->addColumn(ColumnFormat::stringNormal('client_bot'));
$table->addColumn(Column::text('client'));
$table->addColumn(Column::text('client_os'));
$table->addColumn(ColumnFormat::stringNormal('client_device_name'));
$table->addColumn(ColumnFormat::stringNormal('client_brand_name'));
$table->addColumn(ColumnFormat::stringNormal('client_model'));
$table->addIndex('delete_time'); $table->addIndex('delete_time');
$table->addIndex('post_id'); $table->addIndex('post_id');
$table->addIndex('ip'); $table->addIndex('ip');

View File

@@ -22,6 +22,8 @@
<div class="ul-avatar-sidebar-list-item-title">{$vo.nickname_title}</div> <div class="ul-avatar-sidebar-list-item-title">{$vo.nickname_title}</div>
<div class="ul-avatar-sidebar-list-item-intro" style="color: #000;"> <div class="ul-avatar-sidebar-list-item-intro" style="color: #000;">
<span>{$vo.create_time_title}</span> <span>{$vo.create_time_title}</span>
<span>{$vo.client_name}</span>
<span>{$vo.client_os_name}</span>
<a href="{$vo.post.read_url}" title="{$vo.post.title}">《{$vo.post.title}》</a> <a href="{$vo.post.read_url}" title="{$vo.post.title}">《{$vo.post.title}》</a>
</div> </div>
</div> </div>

View File

@@ -156,7 +156,11 @@
<div class="ul-avatar-sidebar-list-item-img" style="background-image: url({$vo.avatar_src});"></div> <div class="ul-avatar-sidebar-list-item-img" style="background-image: url({$vo.avatar_src});"></div>
<div class="ul-avatar-sidebar-list-item-info"> <div class="ul-avatar-sidebar-list-item-info">
<div class="ul-avatar-sidebar-list-item-title">{$vo.nickname_title}</div> <div class="ul-avatar-sidebar-list-item-title">{$vo.nickname_title}</div>
<div class="ul-avatar-sidebar-list-item-intro">{$vo.create_time_title}</div> <div class="ul-avatar-sidebar-list-item-intro">
{$vo.create_time_title}
{$vo.client_name}
{$vo.client_os_name}
</div>
</div> </div>
</div> </div>
{/volist} {/volist}
@@ -377,6 +381,10 @@
}); });
</script> </script>
<script>
$.get('{:url("parseVisit",["visit_id"=>$model_visit->id])}')
</script>
</body> </body>
</html> </html>