Laravel Visits is a counter that can be attached to any model to track its visits with useful features like IP-protection and lists caching
- Features
- Install
- Usage
- Increments and Decrements
- An item visits
- A model class visits
- Countries of visitors
- Referers of visitors
- Top or Lowest list per model type
- Reset and clear values
- Integration with Eloquent
- Change log
- Contributing
- Credits
- License
- A model item can have many types of recorded visits (using tags).
- It's not limitd to one type of Model (like some packages that allow only User model).
- Record per visitors and not by vistis using IP detecting, so even with refresh, visit won't duplicate (can be changed from config).
- Get Top/Lowest visits per a model.
- Get most visited countries, refs, OSes, and languages ...
- Get visits per a period of time like a month of a year of an item or model.
Via Composer
composer require awssat/laravel-visits
- Laravel 5.5+
- PHP 7.1+
- This package rely heavly on Redis. To use it, make sure that Redis is configured and ready. (see Laravel Redis Configuration)
To adjust the package to your needs, you can publish the config file to your project's config folder using:
php artisan vendor:publish --provider="awssat\Visits\VisitsServiceProvider"
- By default
laravel-visits
doesn't use the default laravel redis configuration (see issue #5)
To prvent any data loss add a new conection on config/database.php
'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)
],
and you can define your redis connection name on config/visits.php
'connection' => 'default' // to 'laravel-visits'
It's simple. Using visits
helper as:
visits($model)->{method}()
Where:
- $model: is any Eloquent model from your project.
- {method}: any method that is supported by this library, and they are documented below.
- You can track multiple kinds of visits to a single model using the tags as
visits($model, 'tag1')->increment()
visits($post)->increment();
visits($post)->increment(10);
visits($post)->decrement();
visits($post)->decrement(10);
visits($post)->seconds(30)->increment()
- Note: this will override default config setting (once each 15 minutes per IP).
visits($post)->forceIncrement();
visits($post)->forceDecrement();
- This will ignore IP limitation and increment/decrement every visit.
visits($post)->count();
- Note: $post is a row of a model, i.e. $post = Post::find(22)
visits($post)->period('day')->count();
visits('App\Post')->count()
visits('App\Post')->period('day')->count()
visits($post)->countries()
visits($post)->refs()
visits($post)->operatingSystems()
visits($post)->languages()
visits('App\Post')->top(10)
visits('App\Post')->low(10)
visits('App\Post')->fresh()->top(10)
- Note: you can always get uncached list by enabling
alwaysFresh
from package config.
visits('App\Post')->period('month')->top(10)
visits($post)->reset();
visits($post)->period('year')->reset()
visits($post)->reset('ips');
visits($post)->reset('ips', '127.0.0.1');
- minute
- hour
- xhours [1hours ... to 12hours]
- day
- week
- month
- year
- quarter
- decade
- century
you also can make your custom period by adding a carbon marco in appserviceprovider:
Carbon::macro('endOf...', function () {
//
});
//clear all visits of the given model and its items
visits('App\Post')->reset()
//clear all cache of the top/lowest list
visits('App\Post')->reset('lists')
//clear visits from all items of the given model in a period
visits('App\Post')->period('year')->reset()
//...?
visits('App\Post')->reset('factory')
//increment/decrement methods offer ignore parameter to stop recording any items of ('country', 'refer', 'periods', 'operatingSystem', 'language')
visits('App\Post')->increment(1, false, ['country'])
You can add a visits
method to your model class:
public function visits()
{
return visits($this);
}
Then you can use it as:
$post = Post::find(1);
$post->visits()->increment();
$post->visits()->count();
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING and CODE_OF_CONDUCT for details.
- An export command to save visits of any periods to a table on database.
This project exists thanks to all the people who contribute. [Contribute].
Become a financial contributor and help us sustain our community. [Contribute]
Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]
The MIT License (MIT). Please see License File for more information.