post-image

Theo dõi số lượng truy cập vào ứng dụng Laravel

Tổng quan

Mình xin giới thiệu một package khá hay, Laravel Visits là một package giúp bạn theo dõi số lượng truy cập vào ứng dụng, bao gồm một số chức năng:

  • Một Model có thể được theo dõi lượt truy cập theo nhiều kiểu (sử dụng tag)
  • Có thể sử dụng với mọi Model (một số package chỉ cho phép model User)
  • Ghi lại theo khách truy cập bằng cách sử dụng IP người dùng, tránh việc ghi trùng lặp nếu người đó đã xem rồi
  • Get Model có lượt visit nhiều nhất/ít nhất
  • Get quốc gia có lượt visit nhiều nhất
  • Get visit theo từng giai đoạn như theo tháng hay năm của từng Model

Cài đặt

composer require awssat/laravel-visits
Code language: JavaScript (javascript)

Nếu bạn đang sử dụng phiên bản Laravel < 5.5 thì nhớ đăng ký awssat\Visits\VisitsServiceProvider::class vào config/app.php, Laravel 5.5+ thì không cần.

Publish file config của package sử dụng command:

php artisan vendor:publish --provider="awssat\Visits\VisitsServiceProvider"
Code language: JavaScript (javascript)

Package này sử dụng redis để lưu dữ liệu. Mặc định package không sử dụng cấu hình redis mặc định của Laravel, tạo mới một connection khác trong config/database.php để sử dụng cho laravel-visits phòng tránh việc mất mát dữ liệu:

'laravel-visits' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 3, // anything from 1 to 15, except 0 (or what is set in default) ],
Code language: PHP (php)

Và thay đổi redis connection trong config/visits.php:

'connection' => 'laravel-visits'
Code language: PHP (php)

Sử dụng

Rất đơn giản sử dụng helper visits:

visits($model)->{method}()
Code language: PHP (php)

Trong đó:

  • $model: là Eloquent model bất kỳ trong project của bạn
  • {method}: là method bất kỳ được hổ trợ bởi ‘laravel-visits’, sẽ được giới thiệu dưới đây

Tags: Bạn có thể theo dõi nhiều kiểu truy cập của cùng một model bằng cách sử dụng tag:

visits($model, 'tag1')->increment()

Increments và Decrements

Tăng 1 lượt truy cập:

visits($post)->increment();
Code language: PHP (php)

Tăng nhiều hơn 1:

visits($post)->increment(10);
Code language: PHP (php)

Giảm 1 lượt truy cập:

visits($post)->decrement();
Code language: PHP (php)

Giảm nhiều hơn 1:

visits($post)->decrement(10);
Code language: PHP (php)

Chỉ tăng hoặc giảm lượt truy cập mỗi x giây (dựa vào IP người truy cập)

visits($post)->seconds(30)->increment()
Code language: PHP (php)
  • Việc này sẽ ghi đè cấu hình mặc định của package (mỗi 15phút 1 lần cho 1 IP)

Force increment/decrement:

visits($post)->forceIncrement(); visits($post)->forceDecrement();
Code language: PHP (php)

Việc này sẽ tăng hoặc giảm ngay lập tức mà ko cần kiểm tra IP.

Getting data

Đếm tất cả lượt truy cập của $post:

$post = Post::find(1); visits($post)->count();
Code language: PHP (php)

Đếm số lượt truy cập theo chu kỳ:

$post = Post::find(1); visits($post)->period('day')->count();
Code language: PHP (php)

Đếm lượt truy cập theo Model class

Tất cả lượt truy cập của 1 Model:

// Đếm lượt truy cập vào tất cả các post visits('App\Post')->count()
Code language: PHP (php)

Theo chu kỳ:

visits('App\Post')->period('day')->count()
Code language: PHP (php)

Quốc gia của khách truy cập

visits($post)->countries()
Code language: PHP (php)

Nguồn của khách truy cập

visits($post)->refs()
Code language: PHP (php)

Top 10 post được truy cập nhiều nhất

visits('App\Post')->top(10)
Code language: PHP (php)

Hoặc ít nhất:

visits('App\Post')->low(10)
Code language: PHP (php)

Lấy dữ liệu mới nhất (không cache)

visits('App\Post')->fresh()->top(10)
Code language: PHP (php)

Cũng có thể luôn lấy dữ liệu mới nhất (không cache) bằng cách setting 'always_fresh' => true trong file config.

Lấy dữ liệu theo chu kỳ

visits('App\Post')->period('month')->top(10)
Code language: PHP (php)

Reset và xóa dữ liệu

Xóa lượt truy cập của 1 post:

visits($post)->reset();
Code language: PHP (php)

Xóa theo chu kỳ:

visits($post)->period('year')->reset()
Code language: PHP (php)

Xóa dữ liệu theo IP:

visits($post)->reset('ips'); visits($post)->reset('ips', '127.0.0.1');
Code language: PHP (php)

Ngoài ra:

// Xóa lượt truy cập của Model visits('App\Post')->reset(); // XÓa cache của list thấp nhất/cao nhất của Model visits('App\Post')->reset('lists'); // Xóa dữ liệu theo chu kỳ của Mode visits('App\Post')->period('year')->reset() //...? visits('App\Post')->reset('factory')
Code language: PHP (php)

Tích hợp vào Eloquent

Chúng ta có thể thêm một method visits vào trong model class:

public function visits() { return visits($this); }
Code language: PHP (php)

Và sau đó sử dụng, tiện hơn:

$post = Post::find(1); $post->visits()->increment(); $post->visits()->count();
Code language: PHP (php)

Một package khá tiện cho việc theo dõi số lượt truy cập trong Laravel phải không nào. Happy coding! 

Tham khảo:

Các bạn có thể tham khảo các bài viết hay về Laravel tại đây.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Leave a Reply

Your email address will not be published. Required fields are marked *