Rabu, 28 December 2022

Laravel 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.

Laravel
Package

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

Setelah itu, silakan publish vendor nya seperti:

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

Jika sudah, sekarang kita bisa lakukan migrate:

php artisan migrate

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:

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;
}

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

public function show(Product $product)
{
    return view('products.show', compact('product'));
}

Nah untuk menggunakannya simple dengan tinggal menambahkan method visit seperti:

public function show(Product $product)
{
    $product->visit();
    return view('products.show', compact('product'));
}

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",

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();

With Session

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

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

With User

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

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

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.

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;
}

Kemudian, pada controller nya kita akan buat seperti:

public function show(Article $article)
{
    $article->visit()->withIP()->withSession()->withUser();
    return view('articles.show', compact('article'));
}

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",

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.

return [
    'user_namespace' => "\Coderflex\Laravisit\Models\User",
];

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.

Popular Time

Semua fungsi yang bisa di gunakan kurang lebih seperti ini:

Methods Example 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:

public function index()
{
    $products = Article::query()->popularThisWeek()->get();

    return view('products.index', compact('products'));
}

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.

Karteil
Destinasi Utama Belajar Online dengan Format Tulisan yang Elegan
Kunjungi Sekarang

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.

Irsyad A. PanjaitanGo to Irsyad A. Panjaitan profile

Artikel yang Terkait

Like System dengan Laravel Polymorphic
IAPIrsyad A. Panjaitan
Laravel Dengan Multi Koneksi Database: Panduan Langkah demi Langkah
AAAbd. Asis
Membuat Kode Laravel Lebih Bersih: Memindahkan Kode dari Controller
AAAbd. Asis
Generate Gambar Open Graph untuk Social Sharing dengan Laravel
IAPIrsyad A. Panjaitan
Enum di Filament adalah Sinergi Sempurna
IAPIrsyad A. Panjaitan
Laravel Reverb is a first-party WebSocket server
IAPIrsyad A. Panjaitan
Laravel Herd 1.4.0 (Build: 20)
IAPIrsyad A. Panjaitan