Membuat Visitor Tracker dengan Framework CodeIgniter 3

Pada tutorial ini, kita akan membuat Visitor Tracker dengan menggunakan Framework CodeIgniter 3.

Visitor Tracker ini akan terdiri dari beberapa fitur seperti menambahkan data pengunjung baru, menghitung jumlah pengunjung, menghitung jumlah pengunjung yang sedang online, dan mengambil data pengunjung dari database.

Semua fitur akan ditempatkan dalam sebuah library, sehingga kita bisa menggunakannya kapan saja pada controller atau view.

Membuat Visitor Tracker dengan Framework CodeIgniter 3

Langkah 1: Persiapan

Untuk memulai tutorial ini, kita harus memastikan bahwa CodeIgniter 3 sudah terpasang dan siap digunakan. Jika belum, silakan download dan ikuti petunjuk instalasinya pada website resmi CodeIgniter.

Langkah 2: Membuat database

Buat sebuah database di MySQL dengan nama “visitor_tracker”. Kemudian, buat sebuah tabel dengan nama “visitors” dengan struktur sebagai berikut:

CREATE TABLE `visitors` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip_address` varchar(45) NOT NULL,
  `user_agent` varchar(255) NOT NULL,
  `visit_time` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Langkah 3: Membuat Library VisitorTracker

Pada langkah ini, kita akan membuat library baru dengan nama VisitorTracker yang akan berisi semua fungsi yang dibutuhkan untuk Visitor Tracker.

Buat file baru dengan nama VisitorTracker.php pada direktori application/libraries.
Salin kode berikut ke dalam file VisitorTracker.php.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class VisitorTracker {

    public function __construct() {
        // load library dan helper yang dibutuhkan
        $this->ci =& get_instance();
        $this->ci->load->library('user_agent');
        $this->ci->load->helper('cookie');
    }

    // fungsi untuk menambahkan data pengunjung baru
    public function addVisitor() {
        $ip_address = $this->ci->input->ip_address();
        $user_agent = $this->ci->agent->agent_string();
        $visit_time = time();
        
        // cek apakah pengunjung sudah pernah mengunjungi situs sebelumnya
        if (get_cookie('visitor_id')) {
            $visitor_id = get_cookie('visitor_id');
            // update data pengunjung yang sudah ada
            $this->ci->db->set('visit_time', $visit_time);
            $this->ci->db->where('id', $visitor_id);
            $this->ci->db->update('visitors');
        } else {
            // tambahkan data pengunjung baru ke dalam database
            $data = array(
                'ip_address' => $ip_address,
                'user_agent' => $user_agent,
                'visit_time' => $visit_time
            );
            $this->ci->db->insert('visitors', $data);
            $visitor_id = $this->ci->db->insert_id();
            // set cookie untuk menyimpan ID pengunjung
            set_cookie('visitor_id', $visitor_id, 3600*24*365); // cookie berlaku selama 1 tahun
        }
    }

    // fungsi untuk menghitung jumlah pengunjung
    public function countVisitors($interval = 'today') {
        switch ($interval) {
            case 'today':
                $start_time = strtotime('today');
                break;
            case 'yesterday':
                $start_time = strtotime('yesterday');
                $end_time = strtotime('today');
                break;
            case 'this_month':
                $start_time = strtotime('first day of this month');
                break;
            case 'this_year':
                $start_time = strtotime('january 1 this year');
                break;
            default:
                $start_time = null;
                break;
        }

        if ($start_time) {
            $this->ci->db->where('visit_time >=', $start_time);
            if (isset($end_time)) {
                $this->ci->db->where('visit_time <', $end_time);
            }
        }
        $this->ci->db->from('visitors');
        $query = $this->ci->db->get();
        return $query->num_rows();
    }

    // fungsi untuk menghitung jumlah pengunjung yang sedang online
    public function countOnlineVisitors() {
        $this->ci->db->where('visit_time >=', time() - 60*5); // pengunjung yang aktif dalam 5 menit terakhir
        $this->ci->db->from('visitors');
        $query = $this->ci->db->get();
        return $query->num_rows();
    }

    // fungsi untuk mengambil data pengunjung dari database
    public function getVisitors($interval = 'this_month') {
        switch ($interval) {
            case 'today':
                $start_time = strtotime('today');
                break;
            case 'yesterday':
                $start_time = strtotime('yesterday');
                $end_time = strtotime('today');
                break;
            case 'this_month':
                $start_time = strtotime('first day of this month');
                break;
            case 'this_year':
                $start_time = strtotime('january 1 this year');
                break;
            default:
                $start_time = null;
                break;
        }

        if ($start_time) {
            $this->ci->db->where('visit_time >=', $start_time);
            if (isset($end_time)) {
                $this->ci->db->where('visit_time <', $end_time);
            }
        }
        $this->ci->db->order_by('visit_time', 'desc');
        $this->ci->db->from('visitors');
        $this->ci->db->limit(10);
        $query = $this->ci->db->get();
        return $query->result();
    }

    // fungsi untuk mengambil data jumlah pengunjung untuk ditampilkan di halaman dashboard admin
    public function getVisitorStats() {
        $stats = array(
            'today' => $this->countVisitors('today'),
            'yesterday' => $this->countVisitors('yesterday'),
            'this_month' => $this->countVisitors('this_month'),
            'this_year' => $this->countVisitors('this_year'),
            'total' => $this->countVisitors(),
            'online' => $this->countOnlineVisitors()
        );
        return $stats;
    }
}

Langkah 4: Menggunaan library

Setelah library VisitorTracker selesai dibuat, kita dapat menggunakannya pada controller atau model CodeIgniter dengan cara memuat library tersebut menggunakan perintah $this->load->library().

Misalnya, pada controller Home, kita ingin menambahkan data pengunjung setiap kali halaman diakses dan menampilkan jumlah pengunjung pada halaman, maka kode controller tersebut akan menjadi seperti berikut:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Home extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->library('VisitorTracker');
    }

    public function index() {
        // menambahkan data pengunjung
        $this->visitortracker->addVisitor();
        
        // mengambil data jumlah pengunjung
        $visitor_stats = $this->visitortracker->getVisitorStats();
        
        // menampilkan jumlah pengunjung pada halaman
        $data['visitor_stats'] = $visitor_stats;
        $this->load->view('home', $data);
    }
}

Contoh penggunaan pada halaman home (application/view/home.php).

<h1>Statistik Pengunjung</h1>
<table>
    
    <tr>
        <td>Hari Ini</td>
        <td><?php echo $visitor_stats['today']; ?></td>
    </tr>
    <tr>
        <td>Kemarin</td>
        <td><?php echo $visitor_stats['yesterday']; ?></td>
    </tr>
    <tr>
        <td>Bulan Ini</td>
        <td><?php echo $visitor_stats['this_month']; ?></td>
    </tr>
    <tr>
        <td>Tahun Ini</td>
        <td><?php echo $visitor_stats['this_year']; ?></td>
    </tr>
    <tr>
        <td>Total</td>
        <td><?php echo $visitor_stats['total']; ?></td>
    </tr>
    <tr>
        <td>Online</td>
        <td><?php echo $visitor_stats['online']; ?></td>
    </tr>
</table>

Dengan mengikuti langkah-langkah di atas, ada sudah bisa membuat library VisitorTracker.php yang akan melacak data pengunjung website anda dan menampilkan statiknya.

Namun, perlu diingat bahwa library ini masih membutuhkan penyesuaian lebih lanjut agar sesuai dengan kebutuhan Anda.

Beberapa artikel lain dari blog ini terkait Framework CodeIgniter:

Ali Akbar

Software Developer yang fokus mengembangkan aplikasi berbasis Web dan Desktop. Senang mempelajari teknologi baru terutama di bidang web design dan web development.

View all posts by Ali Akbar →

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *