我花了几个小时搜索访客跟踪器并点击laravel 5.2的计数器使用情况。但我没有找到最好的。如果你知道,请指出我
答案 0 :(得分:1)
我会直接在相应控制器的数据库中记录访问。这是跟踪页面查看最简单方便的方法。它将唯一的访问者会话ID和当前页面保存到数据库。这是一个例子:
class PageController extends Controller
{
public function index()
{
\DB::table('visitors')->create([
'visitor' => session()->getId(),
'page' => 'index',
]);
return view('pages.index');
}
}
我会使用Javascript和接收数据的API端点,但这有点复杂。
我没有测试过这段代码,但应该以这种方式工作。如果它无法正常工作,请添加评论。
HTML中的实际链接
该链接需要onclick属性。用JS监听链接点击只对我不起作用,也许点击和事件处理之间的延迟太大而无法调用该函数。
<a href="some-url-here" onclick="trackClick(this)">
<强>的Javascript 强>
当用户单击上述链接并通过POST将数据推送到应用程序的API端点时,将调用函数trackClick
。不要忘记将csrf_token
替换为您的应用程序的实际令牌。
function trackClick(link) {
$.post({
url: '/api/track-click',
data: {
'_token': csrf_token,
'link_target':$(link).attr('src')
}
});
}
<强>路线强>
这将是您的控制器的相应路线:
Route::post('api/track-click', 'ApiController@addClick');
API控制器
控制器获取POST数据,只是将链接目标保存到数据库中。您可以扩展此功能以检查目标是内部还是外部。这只是现在的起点。
class ApiController extends Controller
{
public function addClick(Request $request)
{
$click = \DB::table('clicks')->where([
'visitor' => session()->getId(),
'link' => $request->get('link_target'),
])->first();
if ($click) {
$click->increment('count');
} else {
\DB::table('clicks')->create(array(
'visitor' => session()->getId(),
'link' => $request->get('link_target'),
'count' => 0
));
}
}
}