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.

    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.

    Go to Irsyad A. Panjaitan profile
    Support me
    SaweriaGithub