2014-03-29

logika paging part 1

sebelum masuk ke paging.. mari bahas dari sisi apa yang tampil bukan pagingnya. Asumsikan gw punya data barang komoditas yang sedang ngantri di gudang buat keluar.

Bahas apa yang dipakai dahulu yaitu komoditas. Nah komoditas ini memiliki nama (terpenting) dan keterangan lain (tidak usah diperjelas agar pendek). Berikutnya prioritas barang yang akan keluar adalah barang yang memiliki status siap keluar (5). lalu yang keluar duluan adalah yang tanggal keluarnya lebih tua (1 maret) dan yang tanggal hari ini.

Jadi kita punya table komoditas yang memiliki field (sederhana)

  1. id
  2. nama
  3. tanggal
  4. status
dari sini kita akan keluarkan datanya, menggunakan logika ini
  • panggil data dengan query. Ingat pada status dan ordernya yang berdasarkan tanggal lebih tua
  • pastikan query benar . SANGAT PENTING
  • tampilkan data

PANGGIL QUERY

Dalam tulisan ini anggap kita mendapat 150 data! namun yang harus tampil cuma 10 maka querynya harus di 'batasi' atau dalam bahasa bule 'LIMIT'. Awalnya kita menulis
select * from komoditas where status=5 order by tanggal desc
berikutnya kita tambahkan dengan limit
 select * from komoditas where status=5 order by tanggal desc limit 5
namun kita harus ada mulai dan akhir
select * from komoditas where status=5 order by tanggal desc limit 0, 5
Lalu kita perhatikan qeuery tersebut memiliki variable yang selalu statis yaitu

  • status
  • jumlah limit 
  • nama table
untuk keamanan, mari buat logika deklarasi yang status tersebut ke .... variable
$status=5;
lalu nanti digunakan hingga didapat
select * from $table where status=$status order by tanggal desc limit 0, $limit
Berikutnya kita pikirkan.. tentang nilai awalnya ( 0 ) pada contoh di atas.. kita beri nama $start
 select * from $table where status=$status order by tanggal desc limit $start$limit
Dari mana asal start? nah disini ada 2 kemungkinan.. Start berasal dari variabel request (post/get) atau dari Session (disarankan jangan). Pertanyaannya model mana yang kamu gunakan? apakah

  1. page
  2. start
Apa beda kedua cara tersebut?

VARIABLE REQUEST PAGE

PAGE berarti halaman, dimana kamu harus menentukan halaman mana yang ditampilkan. Ini juga harus ada sedikit matematika. Anggap halaman yang muncul tidak ada.. maka page=0! tetapi halaman 0 itu sebenarnya tidak ada! yang ada adalah halaman 1.. jadi buatlah 
if(intval($_GET[page])==0) $page=1; 
bila tidak sesuai pernyataan di atas maka 
$page=$_GET[page];
untuk nilai startnya maka harus memakai matematika
$start=($page-1) * $limit;
terlihat rumit!! belum tentu! karena kalau masuk ke paging jadi lebih mudah tahu ini halaman berapa

VARIABLE REQUEST START

ini yang lebih mudah, nilai start sudah sama dengan $start. Namun tetap harus ada kendali seperti berikut
if(intval($_GET[start])<=0)$start=0;
terlihat mudah? belum tentu. Karena kalau masuk ke paging.. apakah kamu tahu halaman berapa yang ditampilkan?


PASTIKAN QUERY BENAR

untuk memastikan query benar dapat memakai konsep demikian
$res = mysql_query( .... ) or die( mysql_error() );
tetapi cara ini kurang tepat.. Karena mengeluarkan error yang tidak menguntungkan (asumsikan kalau error bukan dari code tetapi sistem yang lambat.. anda tentu tak ingin keluar kata maaf mysql lagi demo karena kenaikan UMP! memakai ini sudah cukup

$res = mysql_query( .... ) ;
tetapi ada bagusnya kamu masukkan query dalam var $sql jadi kamu menulis
$res = mysql_query( $sql );
 Berikutnya jalankan perintah demikian..
if( $res) {   jalankan();  } else { perintah_error(); }

TAMPILKAN DATA

untuk menulis tampilan ada 2 cara yaitu menulis dengan html atau masukkan tampilannya ke variable kayak $str. Keduanya tepat namun ada 1-2 hal yang perlu diperhatikan..

  • menulis code panjang didalam if kan menyulitkan km melakukan perbaikan kedepannya
  • variable yang kamu gunakan setidaknya jangan boros
saran saya adalah membuat dalam fungsi seperti contoh di atas.. dalih-dalih menulis 20 baris setelah if, tulis saja fungsi 
jalankan($res);
di bawah fungsi jalankan di ketik.. namun jangan lupa $res di ikutkan.  LHO mana pagindnya?? silakan cari baca artikel selanjutnya.



Tidak ada komentar: