Tuesday, November 30, 2010

'Pagination' Halaman Web Dengan Python

Istilah 'Pagination ' diambil dari dokumentasi Django, yaitu salah satu modul yang berfungsi untuk menampilkan halaman web secara halaman perhalaman. Contoh penerapan Web pagination ini bisa dilihat pada halaman blogspot, Wordpress dan pada halaman arsip berita pada situs-situs berita.

Di sini akan sedikit saya uraikan teknik pembuatan pagination sederhana dengan Python. Yang akan ditekankan disini adalah teknik pengolahan datanya, untuk logika pemrogramannya silahkan Anda gali lebih dalam mungkin logika pemrograman yang Anda gunakan lebih fleksibel dan efisien.

Sumber data yang digunakan untuk pemrograman ini bisa bersumber dari database, teks bahkan file xml tergantung dari kebutuhan Anda. Contoh di sini kita akan menggunakan sumber data yang berasal dari database. Database yang digunakan bisa apa saja yang penting sudah disupport oleh Python, di sini saya tidak akan menguraikan teknik koneksi dan 'penarikan' datanya dari database tapi hanya hasil data yang sudah kita ambil dari database (asumsi saya, Anda sudah menguasai pemrograman database Python ini).

Seperti umumnya, struktur baris data di database terdiri dari field dan data. Setelah data berhasil 'ditarik', masing-masing baris data tersebut kita masukan ke dalam variabel yang bertipe dictionary dengan nama field sebagai 'key' dan isi data sebagai 'value' kemudian masing-masing dictionary yang berisi baris data kita masukan kedalam variabel yang bertipe data list agar bisa di urutkan dan 'diiterasi' perbaris data.

Misal, struktur datafield database yang kita miliki adalah 'nama', 'jenis kelamin', alamat' dan 'kota' maka key dan value dictionary yang kita buat adalah seperti berikut :

datadb = {'nama':'data', 'jenis kelamin':'data', 'alamat':'data', 'kota':'data'}

Setelah itu masing-masing baris kita masukan ke dalam list, dengan ilustrasi sebagai berikut :

datalist = [datadb]

Bila diurai, isi list tersebut akan berbentuk seperti berikut :

datalist = [ {'nama':'data', 'jenis kelamin':'data', 'alamat':'data', 'kota':'data'}, {'nama':'data', 'jenis kelamin':'data', 'alamat':'data', 'kota':'data'}, .... dst..]

Dari variabel datalist inilah data akan kita manipulasi agar dapat ditampilkan dengan teknik pagination, berikut contoh data yang akan gunakan :


datalist = [
        {'nama':'Udin', 'jenis kelamin':'Laki-laki', 'alamat':'Jl. A No 1 A', 'kota':'Jakarta'},
        {'nama':'Mimin', 'jenis kelamin':'Perempuan', 'alamat':'Jl. B No 2 B', 'kota':'Depok'},
        {'nama':'Untung', 'jenis kelamin':'Laki-laki', 'alamat':'Jl. C No 3 C', 'kota':'Jakarta'},
        {'nama':'Petot', 'jenis kelamin':'Laki-laki', 'alamat':'Jl. D No 4 D', 'kota':'Bandung'},
        {'nama':'Uun', 'jenis kelamin':'Perempuan', 'alamat':'Jl. E No 5 E', 'kota':'Tangerang'}
        ]


Untuk menentukan baris data yang akan ditampilkan kita dapat menggunakan metode pengirisan list dan tiap index-nya akan menghasilkan data yang berupa dictionary, seperti berikut :

the_rec = datalist[0:2]

Dari baris kode di atas akan menghasilkan variabel the_rec yang bertipe data dictionary yang berisi dua baris data, kemudian kita tampilkan di halaman web dengan perintah kode seperti berikut :

for i in (the_rec):
        ##memasukan baris data ke variabel d_rec yang berupa dictionary
        d_rec = i
        data = data + """
        <tr>
        <td>Nama :</td><td>%s</td>
        </tr>
        <tr>
        <td>Jenis Kelamin :</td><td>%s</td>
        </tr>
        <tr>
        <td>Alamat :</td><td>%s</td>
        </tr>
        <tr>
        <td>Kota :</td><td>%s</td>
        </tr>
        <tr>
        <td>&nbsp;</td><td>&nbsp;</td>
        </tr>""" %(str(d_rec['nama']), d_rec['jenis kelamin'], d_rec['alamat'], str(d_rec['kota']))

Sedangkan untuk pendeteksian halaman dilakukan oleh baris berikut :

if pg < max_page:
        <tr>pg1 = pg + 1
        <tr>pg_next = """<a href="../../database/page/%d">Next</a> | <a href="../../database/page/%d">Last</a>""" %(pg1, max_page)
else:
        <tr>pg_next = ""
if pg > 1:
        <tr>pg2 = pg - 1
        <tr>pg_prev = """<a href="../../database">First</a> | <a href="../../database/page/%d">Prev</a>""" % pg2
else:
        <tr>pg_prev = ""

Pengecekan halaman ditentukan pada variabel 'pg' berisi nilai yang ditangkap dari 'url query'. Kode lengkap dari contoh yang dibahas disini dapat Anda unduh disini dan berikut contoh tampilannya :


No comments: