Simple Advanced Paging PHP

Membuat Fungsi Advanced Paging dengan berbasis Block pada PHP

Teknik Paging adalah teknik yang digunakan pada segala bahasa pemrograman dalam strategi penyajian data banyak. Jika dalam satu halaman tidak mampu menangani banyaknya data, maka akan dibuat halaman-halaman untuk mempermudah navigasi dan tidak memberatkan halaman pertama. Jika data hanya satu data atau dibawah 100 mungkin tidak masalah dengan penggunaan satu halaman. Namun diluar itu akan menjadi masalah besar. Sangat berat kemungkinan menyakinan puluhan ribu data dalam satu halaman depan. Tentu data tersebut akan dibagi dalam beberapa halaman.

Teknik Paging sederhana pun ternyata tidak cukup untuk memenuhi kebutuhan penyajian data. Misal, diketahui terdapat 10.000 data, dan satu halaman akan menampilkan 10 data. Dengan keadaan seperti itu maka pada navigasi halaman harus ditampilkan 100000/10 = 1000 nomer halaman. tentu hal ini juga tidak menguntungkan baik bagi tampilan maupun kinerja server. Berikut dibawah akan saya tampilkan lagi teknik paging yang sederhana namun dapat mengampu data banyak. Kira-kira hasilnya akan menjadi seperti ini:

Logika-logika dasar yang harus dipenuhi adalah:

  1. Server Web mendapatkan informasi tentang permintaan halaman oleh client adalah dari HTTP Request jenis GET
    Contoh : http://server.ini/index.php?page=1 => permintaan halaman satu, dengan GET[page]
  2. Jika tidak terdapat GET permintaan halaman, maka dianggap client meminta halaman 1
  3. Satu block halaman akan menangani 10 nomer halaman. Block pertama adalah 1-10. Informasi mengenai block didapat dari PENDEKATAN KE ATAS (ceil) dari nomer halaman yang sedang diakses, dibagi dengan jumlah halaman dalam satu block.
    Misal client melakukan akses halaman 11. Berarti client sedang memasuki block ke ? ceil(11/10)=2
    client melakukan akses halaman 9? berarti jelas block ke 1.
  4. LINK PREVIOUS/SEBELUMNYA didapat dengan cara membandingkan, apakah halaman aktif itu masih lebih besar daripada halaman terakhir block 1. Jika lebih besar, maka halaman PREVIOUS aktif. Jika tidak, tidak akan diaktifkan. Jika aktif, maka, halaman previous akan berisi link halaman terakhir dari block sebelumnya.
    Jika diakses halaman 44 maka block aktif adalah block 5, previous adalah 40
  5. LINK Next/Lanjut didapat dengan cara membandingkan, apakah halaman terakhir block aktif masih kurang dari jumlah halaman? Jika masih kurang, maka tombol next dimnculkan dengan link halaman pertama dari block setelahnya.
  6. Jumlah halaman ditentukan dengan menentukan pembulatan keatas dari pembagian jumlah data seluruhnya dibagi dengan jumlah data dalam satu halaman. Misal, terdapat jumlah data 44, dengan satu halaman adalah 5 data per halaman, maka akan didapat 9 jumlah halaman / ceil(44/5)

Berikut Source Code nya


 $jumhal ) {
      $page    = $jumhal;
      $block   = ceil($page/$page_per_block);
   }elseif($_GET[page] < 1){
      $page    = 1;
      $block   = 1;
   }
   /*end of prevention*/
   
   if ( $jumhal>1 )  {
      ?>
      Halaman : 
      = $jumblock  )
      {
         $prev = "yes";
         $next = "no";
      }
      else
      {
         $prev = "yes";
         $next = "yes";
      }


      if (  $prev == "yes"  )  {
         $prev_page  = ( ($block - 1) * $page_per_block );
         $prev_block = $block - 1;
         ?>
         ««First
         «Prev
         1) )  {
      ?>
         ««First
         «Prev
         
            
            
            
            
            Next»
            End » »
            
         Next»
         End»»
          End>>

*/
/*--------------------------------------------------------------------------------------------*/
?>

Cara menggunakan…

Simpanlah script paging diatas menjadi paging.php. Pastikan bahwa halaman yang akan anda paging meload Script seperti berikut:

$item_per_page = 10;
$page_per_block= 10;

$item_per_page adalah jumlah item tiap halaman, dan $page_per_block adalah jumlah halaman tiap Block. Selanjutnya, include kan paging php tersebut ke dalam halaman yang meload paging

include “paging.php”;

dan selanjutnya anda tinggal menmanggil fungsi dengan

paging ( $sql , $item_per_page , $page_per_block , $url , $page , $block )

Contoh:

paging('SELECT * FROM `table`',10,5,'?mod=namamodul&submod=namasubmodul',$page,$block);

Anda dapat mendownload script tersebut di sini

Lihat di halaman anda…

http://www.ziddu.com/download/16369565/paging.php.zip.html

Semoga berguna!…

bimosaurus

eof

Excerpting Recent Post di sidebar

Setelah kita kenal dengan Excerpt di Posting dan resume pada wordpress, maka kita pun sebenarnya bisa memotong title pada Recent Post Sidebar jika diperkirakan terlalu panjang. Selain dengan mencari pluggins, kita bisa melakukannya dengan : Editing WordPress itu sendiri.

Theme WordPress
Biasanya paada Theme WordPress, jika tidak terdapat widget yang dipasang, maka Theme memiliki widget standard sendiri. Widget bawaan dari themes ini biasanya tersimpan di {dir_wp}/wp-contents/themes/nama_themes/sidebar.php. Kira-kira seperti demikian source code yang ada:

Namun jika widget Recent Post dipasang, maka code diatas tidak lagi digunakan, melainkan akan menggunakan function widget() yang terdapat pada default-widget.php pada direktori wp-includes. Pada fungsi tersebut terdapat bagian :

  • Perhatikan pada bagian the_title(). The title tersebut terletak pada file wp-includes/post-template.php, bukalah file tersebut. Saya melakukan penambahan fungsi untuk mempermudah membedakan antara keduanya. Carilah fungsi the_title() kira-kira akan didapatkan seperti demikian:

    function the_title($before = '', $after = '', $echo = true) {
    	$title = get_the_title();
    
    	if ( strlen($title) == 0 )
    		return;
    
    	$title = $before . $title . $after;
    	if ( $echo )
    		echo $title;
    	else
    		return $title;
    }
    

    Coba lakukan seperti yang saya lakukan, tambahkan dibawah fungsi the title diatas tersebut menjadi seperti demikian:

    Ingat! Copy dulu file tersebut sebelum mengubah… 2 file: post-template.php dan default-widget.php

    
    function the_title($before = '', $after = '', $echo = true) {
    	$title = get_the_title();
    
    	if ( strlen($title) == 0 )
    		return;
    
    	$title = $before . $title . $after;
    	if ( $echo )
    		echo $title;
    	else
    		return $title;
    }
    
    
    function the_title_excerpt($before = '', $after = '', $echo = true) {
    	$title_1 = get_the_title();
    	//echo $title_1;
       $title_excerpt = substr($title_1, 0, 30);
    //echo $title_excerpt;
    	if ( strlen($title_excerpt) == 0 )
    		return;
       if(strlen($title_1)>30){
       $dot = "...";
       }else{
       $dot = "";
       }
    	$title_excerpt = $before . $title_excerpt . $after . $dot;
    
    	if ( $echo )
    		echo $title_excerpt;
    	else
    		return $title_excerpt;
    }
    
    
    
    

    Kita tambahkan sebuah fungsi bernama the_title_excerpt(), dimana the_title_excerpt() ini melakukan pengambilan sebanyak 30 hurup dari title yang didapat oleh fungsi get_the_title(); Jika hasilnya lebih dari jumlah hurup dalam judul artikel akan ditambahkan tanda …

    Setelah selesai, buka kembali file default-widget.php, dan lakukan pengubahan dari

  • menjadi

  • Simpan kedua file tersebut, dan pasanglah widget Recent Post anda, dan lihatlah apa yang terjadi untuk nama artikel yang lebih dari 30 karakter? Sukses? tentunya sukses.. Jika tidak, saya siap tanggung jawab hehehe…

    Semoga Berguna

    bimosaurus
    —eof—

    Berkreasi dengan Link ‘MORE’ atau ‘SELANJUTNYA’ dalam Resume Post WordPress

    Perhatian: Sementara Post ini berlaku untuk yang gemar mengolah WordPress dari sisi Script

    Jika anda melakukan installasi WordPress dan dilanjutkan dengan installasi Themes, sedangkan themes tersebut mendukung adanya RESUME halaman awal, biasanya secara default, resume tiap post akan diakhiri dengan tanda […] tanpa Link, kecuali yang telah didukung oleh themes atau plugins tertentu. Contoh:

    posting ini adalah posting yang pertama bahwa dengan blabalbalbalbal […]

    Sedangkan pada umumnya web, kita menginginkan adanya tombol atau link : more, atau selanjutnya, untuk menuju ke post penuh dari resume tersebut. Nah, bagaimana caranya? Sangat mudah.

    Dalam wordpress, terdapat berbagai fungsi yang dapat anda baca pada Function Reference pada codex.wordpress.com. Resume, dalam wordpress akan dinyatakan sebagai EXCERPT. Cara membuat resume dari sebuah post pun hanya tinggal memanggil the_excerpt. Biasanya para desainer themes wordpress akan banyak menggunakan ini untuk membuat tampilan halaman index. Desain awal dari WordPress, memiliki beberapa ketentuan untuk excerpt, antara lain adalah : karakter tertentu akan dibatasi, jumlah kata adalah 55 kata, dan akan diakhiri dengan tanda […]. Kita dapat mengubah semua itu dengan cara melakukan pengubahan suatu file dalam wordpress tersebut. Langkah pertama adalah bukalah CMS WordPress, dan pastikan, apakah Themes yang dipilih mendukung adanya Excerpt. Jika tidak, tutorial selanjutnya akan saya bahas tentang mendesain themes wordpress. Jika iya, apakah Resume atau Excerpt dari potongan artikel berakir dengan […] ? jika anda ingin mengubah, silakan buka file formatting.php dalam {DIREKTORI_UTAMA}/wp-includes/. Kopikan file tersebut sebagai backup apabila kita keliru dalam melakukan modifikasi.

    Selanjutnya bukalah formatting.php tersebut, dan temukan fungsi bernama function wp_trim_excerpt($text)

    kira-kira untuk WordPress Versi 2.x berisi seperti demikian:

    function wp_trim_excerpt($text) {
    	if ( '' == $text ) {
    		$text = get_the_content('');
    
    		$text = strip_shortcodes( $text );
    
    		$text = apply_filters('the_content', $text);
    		$text = str_replace(']]>', ']]>', $text);
    		$text = strip_tags($text);
    		$excerpt_length = apply_filters('excerpt_length', 55);
    		$words = explode(' ', $text, $excerpt_length + 1);
    		if (count($words) > $excerpt_length) {
    			array_pop($words);
    			array_push($words, '[...]');
    			$text = implode(' ', $words);
    		}
    	}
    	return $text;
    }

    Untuk versi 3.x kira-kira demikian:

    function wp_trim_excerpt($text) {
    	$raw_excerpt = $text;
    	if ( '' == $text ) {
    		$text = get_the_content('');
    
    		$text = strip_shortcodes( $text );
    
    		$text = apply_filters('the_content', $text);
    		$text = str_replace(']]>', ']]>', $text);
    		$text = strip_tags($text);
    		$excerpt_length = apply_filters('excerpt_length', 55);
    		$excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
    		$words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
    		if ( count($words) > $excerpt_length ) {
    			array_pop($words);
    			$text = implode(' ', $words);
    			$text = $text . $excerpt_more;
    		} else {
    			$text = implode(' ', $words);
    		}
    	}
    	return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
    }

    Perhatikan, pada bagian

    $excerpt_length = apply_filters('excerpt_length', 55);

    anda dapat mengubah excerpt anda tidak lagi 55 kata, dengan cara mengubah angka yang ada tersebut.

    Kemudian jika anda ingin mengubah […] menjadi ‘selanjutnya’ dalam bentuk miring, maka lakukan pengubahan […] dengan kode “…Selanjutnya“.

    Hasilnya kira-kira akan menjadi seperti berikut:

    versi 2.x

    function wp_trim_excerpt($text) {
    	if ( '' == $text ) {
    		$text = get_the_content('');
    
    		$text = strip_shortcodes( $text );
    
    		$text = apply_filters('the_content', $text);
    		$text = str_replace(']]>', ']]>', $text);
    		$text = strip_tags($text);
    		$excerpt_length = apply_filters('excerpt_length', 55);
    		$words = explode(' ', $text, $excerpt_length + 1);
    		if (count($words) > $excerpt_length) {
    			array_pop($words);
    			array_push($words, 'selanjutnya');
    			$text = implode(' ', $words);
    		}
    	}
    	return $text;
    }

    versi 3.x

    function wp_trim_excerpt($text) {
    	$raw_excerpt = $text;
    	if ( '' == $text ) {
    		$text = get_the_content('');
    
    		$text = strip_shortcodes( $text );
    
    		$text = apply_filters('the_content', $text);
    		$text = str_replace(']]>', ']]>', $text);
    		$text = strip_tags($text);
    		$excerpt_length = apply_filters('excerpt_length', 55);
    		$excerpt_more = apply_filters('excerpt_more', ' ' . 'selanjutnya');
    		$words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
    		if ( count($words) > $excerpt_length ) {
    			array_pop($words);
    			$text = implode(' ', $words);
    			$text = $text . $excerpt_more;
    		} else {
    			$text = implode(' ', $words);
    		}
    	}
    	return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
    }

    Simpan, dan saksikan di halaman depan homepage CMS WordPress anda.. Anda pun dapat berekpsresi lanjut dengan membuat tanpilan lebih menarik dengan melibatkan CSS, seperti a:hover, a:link dan selanjutnya.. Enak bukan?

     

    SEMOGA BERGUNA..

     

    bimosaurus

    eof

     

     

    Perihal NULL dalam SQL

    NULL, Kosong yang bukan karakter kosong

    Sering kali dalam menggunakan sintaks database, kita temui istilah NULL. Konon, Null adalah KOSONG, tapi apakah benar NULL itu kosong? Samakah dengan karakter kosong, atau angka 0? Perhatikan kilasan contoh table dan script di bawah ini:

    SELECT * FROM `biodata` WHERE `tempatlahir` IS NOT ('');

    apakah perbedaan dengan

    SELECT * FROM `biodata` WHERE `tempatlahir` IS NOT NULL;

    Dalam dunia programming, dan terutama SQL, NULL tidak dianggap sebagai karakter dan tidak bernilai. NULL memang kosong, tapi bukan karakter kosong. Beda antara

    SELECT ('');

    dengan

    SELECT (NULL);

    Dengan perbedaan value tersebut, maka terdapat perbedaan pembahasaan NULL. Misal akan dicari isi biodata yang tempatlahir BUKAN NULL, maka akan seperti ini

    SELECT * FROM `biodata` WHERE `tempatlahir` IS NOT NULL

    (Pilih dari tabel biodata yang TIDAK KOSONG)
    bukan

    SELECT * FROM `biodata` WHERE `tempatlahir` NOT IN(NULL);

    Jika akan dicari tempat lahir yang null maka akan seperti ini:

    SELECT * FROM `biodata` WHERE `tempatlahir` IS NULL;

    (Pilih dari tabel biodata yang tempat lahirnya ADALAH KOSONG)
    bukan

    SELECT * FROM `biodata` WHERE `tempatlahir`=NULL

    Sedangkan untuk sekedar karakter kosong, maka Operasional Query akan menjadi seperti ini

    SELECT * FROM `biodata` WHERE `tempatlahir` NOT IN('');

    (Pilih dari tabel biodata yang tempat lahirnya tidak ”)

    dan

    SELECT * FROM `biodata` WHERE `tempatlahir`='';

    Dengan sifat NULL tersebut, maka tidak seharusnya NULL dikenai operasional matematis, baik penjumlahan, equal, samadengan, tidak sama dengan, kurang dari, dan lain-lainnya. Namun pembahasaannya adalah : IS NOT NULL (tidak kosong), IS NULL (adalah kosong)

    SELECT (“”) berisi nilai karakter kosong. Tetapi dia sebenarnya tidak kosong, sehingga NOT NULL
    SELECT (0) memang berisi angka 0, tetapi dia tidak kosong maka dia tidak NULL, NOT NULL

    Tanda NULL dalam SQL akan ditandai dengan kata NULL dalam record yang berisi nilai tersebut.

    Untuk mengetahui sebuah record berisi nilai NULL maka dapat menggunakan sintaks sejenis berikut :

    SELECT ISNULL(`namafield`) FROM `table`;

    Jika NULL maka akan berisi angka 1, dan jika tidak null akan berisi 0

    Sekian, semoga berguna

    bimosaurus
    eof

    Mengenal Fungsi-fungsi Waktu dalam MySQL

    Fungsi waktu, mau tidak mau memang harus ada dalam proses database, karena dalam proses pengolahan data akan sangat berpotensi bersinggungan dengan waktu. Berikut beberapa point penting dalam proses sql yang berhubungan dengan waktu

    1. Type data.

    Tipe data adalah format data yang akan dikenakan untuk rekord data yang berupa waktu tersebut.
    a. Tipe data Time berformat : jam:menit:detik, contoh 12:00:01
    b. Tipe data Date berformat : tahun-bulan-tanggal, contoh 2011-10-10
    c. Tipe data datetime : tahun-bulan-tanggal jam:menit:detik, contoh 2011-10-10 12:00:01
    d. Tipe data Timestamp : berformat datetime, namun terisi secara otomatis berupa tanggal dan waktu sekarang, jika tidak terisi

    2. Beberapa Sintaksis
    NOW() adalah Fungsi untuk menampilkan tanggal dan jam saat ini. Bentuknya adalah tipe data DateTime
    CURDATE() adalah Fungsi untuk menampilkan tanggal saat ini. Bentuknya adalah tipe data Date
    CURTIME() adalah Fungsi untuk menampilkan waktu saat ini. Bentuknya adalah tipe data Time
    MONTH() adalah Fungsi untuk menampilkan bulan dalam waktu yang dimaksud.. Contoh SELECT MONTH(NOW()); Bentuknya adalah angka bulan ke
    MONTHNAME() adalah Fungsi untuk menampilkan bulan dalam waktu yang dimaksud dengan bentuk nama..

    Contoh :

    SELECT MONTHNAME(NOW()); 

    Bentuknya adalah nama bulan

    YEAR() Fungsi untuk menampilkan tahun dalam waktu yang dimaksud.

    Contoh:

    SELECT YEAR(CURDATE());

    Berisi tahun yang dimaksud

    DAY() Fungsi untuk menampilkan hari kesekian dalam satu bulan pada waktu yang dimaksud. Contoh:

    SELECT DAY(NOW()); 
    

    Berisi nomer hari ke “” dalam satu bulan

    DAYNAME() Fungsi untuk menampilkan hari pada waktu yang dimaksud dalam bentuk Nama Hari. Contoh:

    SELECT DAY(NOW()); 

    Berisi nama hari

    weekday() Fungsi untuk menampilkan hari berskala mingguan pada waktu yang dimaksud.

    Contoh:

    SELECT WEEKDAY(NOW());

    Hasilnya adalah hari dalam satu minggu

    DATE_ADD, INTERVAL Berfungsi untuk menampilkan berapa hari ke depan, ke belakang, tahun ke ke depan dan belakang. Contoh, jika saya ingin menampilkan tanggal dua minggu ke sebelumnya adalah

    SELECT DATE_ADD(NOW(), INTERVAL -2 WEEK)

    atau

    SELECT DATE_ADD(CURDATE(), INTERVAL -14 DAY)

    Bentuknya sangat tergantung pada yang dikenai interval, apakah NOW(), CURDATE(), tanggal tertentu dll

    DATE() berfungsi untuk menampilkan ‘tanggal’ pada waktu yang dimaksudkan di dalam kurung. Berwujud angka
    hour() berfungsi untuk menampilkan ‘jam’ pada waktu yang dimaksudkan di dalam kurung. Berwujud angka
    minute() berfungsi untuk menampilkan ‘menit’ pada waktu yang dimaksudkan di dalam kurung. Berwujud angka
    second() berfungsi untuk menampilkan ‘detik’ pada waktu yang dimaksudkan di dalam kurung. Berwujud angka

    Salah satu contoh jika diinginkan suatu data yang diinputkan dua minggu silam, kira-kira kode akan menjadi seperti ini:

    SELECT 
    `name` AS nama, 
    `last_post` AS kapan, 
    `income` AS jumlahsetor 
    FROM 
    `tb_income` 
    WHERE 
    `input_date` IN (SELECT DATE_ADD(NOW(), INTERVAL -14 DAY));
    

    Sekian dulu, semoga berguna…

    bimosaurus

    eof