Cara Membuat Kelas Penanganan Halaman Pada PHP

Apabila informasi dari suatu tabel hendak ditampilkan dalam suatu halaman web sangat banyak (lebih dari 30-40 baris), biasanya perlu diatur agar satu halaman tidak berisi semua baris tersebut. Mengingat penyajian informasi yang dibatasi dengan jumlah halaman tertentu dalam satu halaman seringkali dilibatkan dalam skrip-skrip yang hendak dibuat, akan lebih baik dikemas dalam sebuah pustaka. Sebagai implementasinya, dapat dibuat sebuah kelas bernama kelas_halaman. Kodenya adalah sebagai berikut dan simpan dengan file halaman.php.
<?php
class kelas_halaman
{
    //properti
    var $halaman_sekarang;
    var $jumlah_data;
    var $jumlah_halaman;
    var $baris_per_halaman;
  
    //konstruktor
    function kelas_halaman($jum_baris_per_hal)
    {
        $this->baris_per_halaman = $jum_baris_per_hal;
      
        $this->halaman_sekarang = $_GET['page'];
        if (empty($this->halaman_sekarang))
            $this->halaman_sekarang = 1;
    }
    function tentukan_total_baris($jumlah)
    {
        $this->jumlah_data = $jumlah;
        $this->jumlah_halaman = ceil($jumlah / $this->baris_per_halaman);
    }
    function peroleh_awal_record()
    {
        $awal_record = ($this->halaman_sekarang - 1) * $this->baris_per_halaman;
        return $awal_record;
    }
    function tampilkan_link_halaman()
    {
        if ($this->jumlah_halaman > 1)
        {
            print("Halaman : ");
            for ($hal = 1; $hal <= $this->jumlah_halaman; $hal++)
            {
                if ($hal == $this->halaman_sekarang)
                    echo "$hal |";
                else
                    {
                        $nama_skrip = $_SERVER['PHP_SELF'];
                  
                        echo "<a href=\"$nama_skrip?page=$hal\"" .
                        ">$hal</a> |\n";
                    }
            }
        }
    }
}
?>
Sebuah kelas terdirii atas dua komponen, yaitu properti dan fungsi. Properti adalah variabel-variabel dalam suatu kelas, sedangkan fungsi adalah suatu kumpulan kode yang digunakan untuk melaksanakan suatu tugas tertentu. Perlu diketahui, properti hanya dikenal dalam kelas, dan tidak dikenal di luar kelas. Jadi, bagian luar kelas, properti bersifat tersembunyi. Yang bisa mengakses properti hanyalah fungsi milik kelas tersebut.
Pada skrip halaman.php, kelas kelas_halaman mengandung properti :
  1. $halaman_sekarang
  2. $jumlah_data
  3. $jumlah_halaman
  4. $baris_per_halaman
Properti didefinisikan dengan menggunakan kata var. Adapun fungsi-fungsi yang terdapat pada kelas tersebut adalah sebagai berikut :
  1. kelas_halaman()
  2. tentukan_total_baris()
  3. peroleh_record_awal()
  4. tampilkan_link_halaman()
Secara khusus, fungsi yang memiliki nama sama dengan nama kelas dinamakan kosntruktor. Konstruktor akan dipanggil secara otomatis ketika suatu objek diciptakan melalui new.
Konstuktor kelas_halaman() berfungsi untuk menentukan jumlah baris dari halaman. Kodnya adalah sebagai berikut :
function kelas_halaman($jum_baris_per_hal)
    {
        $this->baris_per_halaman = $jum_baris_per_hal;
       
        $this->halaman_sekarang = $_GET['page'];
        if (empty($this->halaman_sekarang))
            $this->halaman_sekarang = 1;
    }
Fungsi ini memiliki sebuah parameter (argumen), yaitu :
$jum_baris_per_hal
Kode :
$this->baris_per_halaman = $jum_baris_per_hal;
yang dipakai untuk mengisikan nilai yang terdapat pada
$jum_baris_per_hal ke properti $baris_per_halaman
Namun, perlu diketahui, penggunaan $this-> digunakan untuk mempertegas bahwa yang disebutkan setelah -> adalah properti dalam kelas.
Kode
$this->halaman_sekarang = $_GET['page'];
dipakai untuk memperoleh nilai yang dilewatkan dari skrip melalui metode GET, kemudian diberikan ke properti $halaman_sekarang. Dalam hal ini, nilai yang diambil adalah nilai dari variabel bernama page. Jad, $_GET['page'] berarti isi dari variabel page yang dilewatkan melalui metode GET.
Selanjutnya, kode
if (empty($this->halaman_sekarang))
            $this->halaman_sekarang = 1;
digunakan untuk menentukan halaman sekarang adalah 1, sekiranya pada pengisian melalui $_GET[] ternyata properti $halaman_sekarang tidak berisi apa-apa alias kosong. Sekedar diketahui, fungsi empty() menghasilkan nilai benar jika argumennya berupa nilai kosong atau nilai tidak benar (FALSE).
Fungsi tentukan _total_baris() digunakan untuk menentukan jumlah baris keseluruhan yang akan disajikan. Kodenya sebaga berikut :
function tentukan_total_baris($jumlah)
    {
        $this->jumlah_data =$jumlah;
        $this->jumlah_halaman=
            ceil($jumlah / $this->baris_per_halaman);
    }
Nilai argumen $jumlah diberikan ke properti $jumlah_data melalui perintah
$this->jumlah_data =$jumlah;
Adapun kode berikutnya digunakan untuk menentukan jumlah halaman. Nilainya disimpan di properti $jumlah_halaman.
Fungsi peroleh_awal_record() menghasilkan nomor awal record yang akan ditampilkan. Kodenya :
function peroleh_awal_record()
    {
        $awal_record = ($this->halaman_sekarang - 1) *
                        $this->baris_per_halaman;
        return $awal_record;
    }
Nomor awal record dihitung melalui nilai dalam properti $halaman_sekarang dan $baris_per_halaman. Pernyataan return digunakan untuk memberikan nilai balik fungsi (nilai yang dapat ditangkap oleh pemanggilnya).
Fungsi tampilkan_link_halaman() digunakan untuk menampilkan link-link nomor halaman, yang nanti bisa diklik oleh pemakai. Kodenya adalah sebagai berikut :
function tampilkan_link_halaman()
    {
        if ($this->jumlah_halaman > 1)
        {
            print('Halaman : ");
            for ($hal = 1; $hal <= $this->jumlah_halaman; $hal++)
            {
                if ($hal == $this->halaman_sekarang)
                    echo "$hal |";
                else
                    {
                        $nama_skrip = $_SERVER['PHP_SELF'];
                  
                        echo "<a href=\"$nama_skrip?page=$hal\"" .">$hal</a> |\n";
                    }
            }
        }
    }
  1. Mula-mula tulisan "Halaman : "ditampilkan dulu
  2. Kemudian, nomor-nomor halaman ditampilkan melalui pernyataan for.
Pernyataan for perlu dibahas secara sekilas. Kegunaannya adalah untuk melakukan pengulangan proses. Sebagai contoh :
for ($hal = 1; $hal <= $this->jumlah_halaman; $hal++)
digunakan untuk memproses bagian yang mengikuti for (dalam hal ini yang terletak dalam { dan } yang berada tepat dibawahnya) dimulai dari variabel $hal bernilai 1 hingga isi $hal bernilai sama dengan isi properti $jumlah_halaman. Kode $hal++ digunakan untuk menaikkan isi variabel $hal sebesar 1 setiap kali bagian { } yang mengikuti for telah diproses. Jadi, kalau $jumlah_halaman misalnya berisi 3, $hal akan berisi 1,2, dan terakhir adalah 3. Pada masing-masing nilai tersebut bagian yang berada dalam { } dieksekusi.
Kode 
 if ($hal == $this->halaman_sekarang)
             echo "$hal |";
 else
 {
            $nama_skrip = $_SERVER['PHP_SELF'];
                   
            echo "<a href=\"$nama_skrip?page=$hal\"" .">$hal</a> |\n";
 }
digunakan untuk mengatur isi $hal diikuti dengan | kalau nilai $hal sama dengan isi properti $halaman_sekarang. Namun, kalau $hal dan $halaman_sekarang tidak sama maka :
  1. Variabel $nama_skrip diisi dengan nama skrip yang sedang berjalan (diperoleh melalui $_SERVER['PHP_SELF'])
  2. Link ke halaman dibentuk melalui echo (echo adalah alternatif dari print). Deretan <a> hingga </a> adalah tag HTML yang akan dipakai untuk menangani link (koneksi ke skrip lain).
Sekarang akan dicoba pemanfaatan kelas yang terdapat pada halaman.php. Skripnya adalah sebagai berikut, bagian yang dicetak tebal adalah tambahan terhadap skrip sebelumnya dan simpan file dengan nama teshal.php.
<html>
<head>
<title>Menampilkan Data Per Halaman</title>
</head>
<body>
    <?php
    require_once "halaman.php";
   
    $per_halaman = 20;
    $halaman = new kelas_halaman($per_halaman);

   
    $server = "127.0.0.1";
    $pemakai = "userphp";
    $password = "php123";
   
    $id_mysql = mysql_connect($server, $pemakai, $password);
    if (! $id_mysql)
        die ("Tidak dapat melakukan koneksi ke server MySQL");   
   
    $kepegawaian = mysql_select_db("kepegawaian", $id_mysql);
    if (! $kepegawaian)
        die ("Tak dapat mengakses database kepegawaian");
   
    //Bagian untuk menampilkan data
    $sql ="SELECT nip, nama, tgl_lahir, jenis_kelamin, alamat FROM pegawai";
    $hasil = mysql_query($sql, $id_mysql);
   
    $jum_baris = mysql_num_rows($hasil);
    $halaman->tentukan_total_baris($jum_baris);
    $awal_record = $halaman->peroleh_awal_record();
   
    $sql ="SELECT nip, nama, tgl_lahir, jenis_kelamin, alamat FROM pegawai " .
           "LIMIT $awal_record, $per_halaman";
    $hasil = mysql_query($sql, $id_mysql);
   
    $nomor = $awal_record;

   
    print("<table width = \"80%\" border=\"1\">\n");
    print("<tr>\n");
    print("<td width=\"10%\">No</td>\n");
    print("<td width=\"15%\">NIP</td>\n");
    print("<td width=\"30%\">Nama</td>\n");
    print("<td width=\"20%\">Tanggal Lahir</td>\n");
    print("<td width=\"10%\">Jenis Kelamin</td>\n");
    print("<td width=\"40%\">Alamat</td>\n");
    print("</tr>\n");
   
    while ($baris = mysql_fetch_row($hasil))
    {
        $nomor++;
       
        $nip = $baris[0];
        $nama = $baris[1];
        $tgl_lahir = $baris[2];
        $jenis_kelamin = $baris[3];
        $alamat = $baris[4];
       
        print("<tr>\n");
        print("<td>$nomor</td>\n");
        print("<td>$nip</td>\n");
        print("<td>$nama</td>\n");
        print("<td>$tgl_lahir</td>\n");
        print("<td>$jenis_kelamin</td>\n");
        print("<td>$alamat</td>\n");
    }
   
    print("</table>\n");
   
    mysql_close($id_mysql);
   
    //Tampilkan link halaman
    $halaman->tampilkan_link_halaman();
    ?>
</body>
</html>
Tambahan pertama yang diberikan berupa :
     require_once "halaman.php";
   
    $per_halaman = 20;
    $halaman = new kelas_halaman($per_halaman);
Pernyataan pertama digunakan untuk menyertakan skrip halaman.php, yang berisi kelas yang dibahas diawal tulisan. Pernyataan kedua digunakan untuk menentukan jumlah baris per halaman. Selanjutnya objek berkelas kelas_halaman diciptakan melalui new. Perhatikan bahwa variabel yang mencatat jumlah halaman dilewatkan dalam tanda(). Objek yang terbentuk akan direferensi atau diacu oleh variabel $halaman. Melalui variabel $halaman inilah, bjek dapat diproses lebih lanjut.
Kode berikutnya,
$jum_baris = mysql_num_rows($hasil);

berguna untuk mendapatkan jumlah baris dari perintah SQL yang telah dieksekusi. Jumlah baris kemudian diberikan untuk memberitahukan ke objek mengenai jumlah baris keseluruhan.
$halaman->tentukan_total_baris($jum_baris);
Perhatikan, untuk memanggil fungsi milik objek (yang didefinisikan dalam kelas) diperlukan tanda ->
Selanjutnya
$awal_record = $halaman->peroleh_awal_record();
digunakan untuk mendapatkan awal record untuk halaman sekarang. Hasilnya dicatat pada variabel $awal_record.
Kode
    $sql ="SELECT nip, nama, tgl_lahir, jenis_kelamin, alamat FROM pegawai " .
           "LIMIT $awal_record, $per_halaman";
    $hasil = mysql_query($sql, $id_mysql);
untuk menjalankan perintah SQL, dengan melakukan pembatasan hanya sebanyak nilai $per_halaman dimulai dari record dengan posisi $awal_record. Dengan cara seperti inilah, hasil yang ditampilkan benar-benar sesuai dengan isi $per_halaman.
Agar nomor yang akan ditampilkan dalam tabel sesuai dengan halaman yang dikehendaki pemakai, maka isi $nomor perlu diatur melalui
 $nomor = $awal_record;
Kode terakhir yang ditambahkan dalam skrip adalah
$halaman->tampilkan_link_halaman();
Dengan pemanggilan seperti itu, link halaman dapat ditampilkan seperti berikut ini :
 Juga bisa dicoba meletakkan petunjuk mouse ke link halaman 2 dan perhatikan nilai dari linknya.

0 Comments