Laravel Visitor

4 min read

Published on 28 Dec, 2022

Written by Irsyad A. Panjaitan

Fill in LaravelPackage

ArticlesLaravel Visitor

Dalam artikel ini kita akan belajar menggunakan package yang dibuat oleh coderflexx, yang mana package ini dapat dengan mudah melihat seberapa banyak views dari berbagai model yang kita punya.

Instalasi Laravisits

Buka terminal Anda dan pastikan aktif di project laravel Anda, dan silakan jalankan perintah untuk menginstal packagenya seperti:

composer require coderflexx/laravisit
bashCopy

Setelah itu, silakan publish vendor nya seperti:

php artisan vendor:publish --provider="Coderflex\\Laravisit\\LaravisitServiceProvider"
bashCopy

Jika sudah, sekarang kita bisa lakukan migrate:

php artisan migrate
bashCopy

Dengan begitu, dia akan memigrasi tabel yang dibawa nya by default yaitu laravisits.

Penggunaan

Untuk menggunakan nya sangat mudah sekali, hanya tinggal mengimplementasikan interface CanVisit di model yang kita ingin liat visitor nya. Dalam contoh ini saya akan menganggap bahwa Anda mempunyai model Product dan juga Article.

Pada model Product silakan tambahkan interface dan trait nya seperti berikut:

app/Models/Product.php
namespace App\Models; use Coderflex\Laravisit\Concerns\CanVisit; use Coderflex\Laravisit\Concerns\HasVisits; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Product extends Model implements CanVisit { use HasFactory; use HasVisits; }
phpCopy

Setelah itu, maka kita bisa langsung menggunakan nya pada saat view untuk produk yang kita punya. Pada controller nya biasanya kan seperti ini:

app/Http/Controllers/ProductController.php
public function show(Product $product) { return view('products.show', compact('product')); }
phpCopy

Nah untuk menggunakannya simple dengan tinggal menambahkan method visit seperti:

app/Http/Controllers/ProductController.php
public function show(Product $product) { $product->visit(); return view('products.show', compact('product')); }
phpCopy

Dan sekarang, jika Anda kunjungi http://laravisits.test/products/1 harusnya data akan masuk di database yang isinya kurang lebih seperti ini:

id: 1, visitable_type: "App\Models\Product", visitable_id: 1, data: "[]", created_at: "2022-12-28 08:58:42", updated_at: "2022-12-28 08:58:42",
bashCopy

With Ip Address

Jika Anda perhatikan, itu datanya masih array yang kosong, mungkin kalian berfikir apa kira-kira isi dari field data tersebut. Sebenarnya itu tergantung kita, jika kita ingin record ip address nya bisa dengan menambahkan method withIp() seperti:

$product->visit()->withIP();
phpCopy

With Session

Atau, jika kalian ingin juga menambahkan session nya, bisa juga dengan cara seperti:

$product->visit()->withIP()->withSession();
phpCopy

With User

Dan jika kalian ingin menambahkan siapa user nya, bisa dengan cara:

$product->visit()->withIP()->withSession()->withUser();
phpCopy

Semudah itu saja, untuk saat ini, saya akan contoh kan pada model Article, pada model Article silakan masukan trait dan juga interface nya seperti product tadi.

app/Models/Article.php
namespace App\Models; use Coderflex\Laravisit\Concerns\CanVisit; use Coderflex\Laravisit\Concerns\HasVisits; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Article extends Model implements CanVisit { use HasFactory; use HasVisits; }
phpCopy

Kemudian, pada controller nya kita akan buat seperti:

app/Http/Controllers/ArticleController.php
public function show(Article $article) { $article->visit()->withIP()->withSession()->withUser(); return view('articles.show', compact('article')); }
phpCopy

Dan sekarang jika kita kunjungi http://laravisits.test/articles/1, maka harusnya data akan sudah masuk ke dalam tabel laravisits, namun kali ini datanya tidak kosong.

id: 2, visitable_type: "App\Models\Article", visitable_id: 1, data: "{"ip": "127.0.0.1", "session": "8WHlQIp7DPLnnU5xZKSyGNUpnMpjTAVBIXFYd7SX", "user_id": null}", created_at: "2022-12-28 09:04:35", updated_at: "2022-12-28 09:04:35",
bashCopy

Jika seandainya ada user yang sedang login, maka data untuk user_id tidak akan null seperti contoh di atas.

Track User

By default, dia akan melihat model User yang ada pada \Coderflex\Laravisit\Models\User, itu bisa di ganti tepat pada file konfigurasi nya.

config/laravisits.php
return [ 'user_namespace' => "\Coderflex\Laravisit\Models\User", ];
phpCopy

By default dia akan membaca ip address, sehingga itu tidak akan auto nambah jika terus-terusan di refresh.

Kita juga dapat melilhat dari berbagai popularitas yang kita inginkan, contoh nya itu entah paling banyak di kunjungin hari ini, minggu ini, bulan ini, dll.

Semua fungsi yang bisa di gunakan kurang lebih seperti ini:

MethodsExample Usages
withTotalVisitCount()Post::withTotalVisitCount()->first()->visit_count_total
popularAllTime()Post::popularAllTime()->get()
popularToday()Post::popularToday()->get()
popularLastDays()Post::popularLastDays(10)->get()
popularThisWeek()Post::popularThisWeek()->get()
popularLastWeek()Post::popularLastWeek()->get()
popularThisMonth()Post::popularThisMonth()->get()
popularLastMonth()Post::popularLastMonth()->get()
popularThisYear()Post::popularThisYear()->get()
popularLastYear()Post::popularLastYear()->get()
popularBetween()Post::popularBetween(Carbon::createFromDate(2019, 1, 9), Carbon::createFromDat(2022, 1, 3))->get();

Untuk penggunaan nya mudah saja, kita akan ambil contoh untuk popular minggu ini:

app/Controllers/ProductController.php
public function index() { $products = Article::query()->popularThisWeek()->get(); return view('products.index', compact('products')); }
phpCopy

Dan dia akan menunjukkan mana yang paling popular pada minggu ini. Anda bisa pelajari lebih lanjut tentang package ini disini. Namun untuk penggunaan nya sendiri, kurang lebih seperti contoh di atas.

Semoga artikel ini bermanfaat, saya Irsyad, saya akan melihat Anda di artikel selanjutnya.

Irsyad A. Panjaitan

Let's start living like no one can help us in any event, so that when we are helped in certain times, it becomes a plus in itself.
3

Share on