Tab Sederhana dengan jQuery
Keuntungan yang didapat dengan membuat sebuah navigasi tab dengan jQuery adalah halaman tidak perlu dimuat ulang hanya untuk berganti tab yang aktif. Kenapa hal itu bisa terjadi? Karena sebenarnya semua halaman yang ada di seluruh tab sudah dimuat sejak pertama kali kita membuka web. Teknik ini yang dipakai untuk bizcard saya. Berikut ini adalah kode jQuery yang digunakan.
$(document).ready(function() { $('#tab1').fadeIn('slow'); $('ul#nav li a').click(function() { $('ul#nav li a').removeClass('aktif'); $(this).addClass("aktif"); $('.tab_konten').hide(); var aktif = $(this).attr('href'); $(aktif).fadeIn('slow'); return false; }); });
Sedangkan ini adalah HTML-nya.
<ul id="nav"><!-- navigasi --> <li><a href="#tab1" class="about aktif"><span>About Me</span></a></li> <li><a href="#tab2" class="network"><span>Networks</span></a></li> <li><a href="#tab3" class="contact"><span>Contact</span></a></li> </ul> <div id="konten"><!-- mulai konten --> <div style="display: none;" id="tab1" class="tab_konten"> <!-- konten #tab1 --> </div> <div style="display: none;" id="tab2" class="tab_konten"> <!-- konten #tab2 --> </div> <div style="display: none;" id="tab3" class="tab_konten"> <!-- konten #tab3 --> </div> </div>
Penjelasannya adalah sebagai berikut. Pada kondisi awal, ketiga tab dalam posisi tidak aktif (style=”display: none;”). Kemudian pada saat halaman web dimuat pertama kali, #tab1 diaktifkan (lihat baris ke-2 kode JavaScript) dengan efek fade in, sekaligus menampilkan isinya.
Berikutnya adalah ketika ada sebuah tab yang diklik, semua class=”aktif” dihilangkan kecuali pada tab yang dipilih (baris ke-4 dan ke-5 kode JavaScript). Begitu pula dengan isinya, semua disembunyikan kecuali tab yang dipilih.
Bagaimana cara untuk menemukan tab yang aktif? Cari attribute href pada class yang aktif, value-nya menunjukkan mana tab yang harus ditampilkan (baris ke-7 dan ke-8 kode JavaScript).
Catatan ini disadur dan ditulis ulang dengan modifikasi seperlunya dari blog ini. Gambar juga diambil dari situ.
Multiple File Upload dengan PHP dan HTML5
Jika kita ingin melakukan upload lebih dari satu file, biasanya akan menggunakan kode HTML sebagai berikut:
<form action="" method="post" enctype="multipart/form-data"> <input type="file" name="berkas[]" /> <input type="file" name="berkas[]" /> <input type="submit" value="Upload" /> </form>
Kelemahannya adalah kita harus menekan tombol browse sebanyak jumlah file yang ingin di-upload. Selain itu membutuhkan bantuan Javascript jika diinginkan fasilitas untuk penambahan field upload.
Melanjutkan catatan file upload yang lalu, kali ini adalah tentang mengunggah (upload) banyak berkas (file) dengan PHP dan HTML5. Ternyata HTML5 sudah mampu mengunggah banyak file sekaligus tanpa bantuan Javascript, hanya dengan sebuah form <input type=’file’>. Namun ada 2 hal yang membedakan dengan file upload biasa, pertama pada attribute name, yaitu di belakangnya ditambahkan tanda kurung kotak “[ ]” yang akan menyebabkan PHP memperlakukannya sebagai sebuah array. Perbedaan yang kedua yaitu adanya attribute multiple, yang baru diperkenalkan pada HTML5.
<form action="" method="post" enctype="multipart/form-data"> <input type="file" name="berkas2[]" /> <input type="submit" value="Upload" /> </form>
Jika kita coba tampilkan di layar menggunakan perintah print_r($_FILES)
(baca catatan file upload yang lalu) maka hasilnya adalah kurang lebih sebagai berikut:
Array ( [berkas2] => Array ( [name] => Array ( [0] => 125586922.jpg [1] => afpheh5e.jpg [2] => baby nirvana.jpg ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg [2] => image/jpeg ) [tmp_name] => Array ( [0] => /tmp/phpuBSQsq [1] => /tmp/phpOJajKX [2] => /tmp/phpW93N1u ) [error] => Array ( [0] => 0 [1] => 0 [2] => 0 ) [size] => Array ( [0] => 91835 [1] => 41895 [2] => 36404 ) ) )
Sekarang kita punya array multidimensi yang bentuknya sedikit aneh karena alih-alih dikelompokkan berdasarkan indeks 0, 1, 2, dst melainkan indeks name, type, tmp_name, dst. Menggunakan operator foreach kita bisa membagi file menurut indeks numeriknya tanpa harus melakukan transformasi array yang rumit.
foreach($_FILES['berkas2']['tmp_name'] as $key => $tmp_name) { move_uploaded_file($tmp_name, "uploads/{$_FILES['berkas2']['name'][$key]}"); }
Kini mengunggah banyak file sekaligus jadi lebih mudah, tekan tombol ctrl pada keyboard atau cukup drag mouse untuk memilih file-file yang ingin di-upload. Berikut ini adalah kode sumber lengkapnya:
<!DOCTYPE html> <html> <head> <title>upload 1 file</title> <meta charset="utf-8"> </head> <body> <div> <form action="" method="post" enctype="multipart/form-data"> <p> <input type="file" name="berkas2[]" multiple="multiple" /> <input type="submit" value="Upload" /> </p> </form> </div> </body> </html> <pre> <?php if(isset($_FILES['berkas2'])) { foreach($_FILES['berkas2']['tmp_name'] as $key => $tmp_name) { move_uploaded_file($tmp_name, "uploads/{$_FILES['berkas2']['name'][$key]}"); } } ?>
Dasar File Upload dengan PHP
Jika ingin membuat sebuah mekanisme pengunggah data umumnya kita menggunakan kode berikut:
<form action="" method="post" enctype="multipart/form-data"> <input type="file" name="berkas" /> <input type="submit" value="Upload" /> </form>
Simpan kode HTML di atas dengan nama upload.php, kemudian lihat hasilnya di browser.
Agar kode di atas agar dapat digunakan untuk meng-upload file maka tambahkan dengan script PHP berikut.
<?php if(isset($_FILES['berkas'])) { move_uploaded_file($_FILES['berkas']['tmp_name'], "uploads/{$_FILES['berkas']['name']}"); } ?>
Letakkan kode tersebut setelah tag penutup html. Kemudian buatlah sebuah folder dengan nama “uploads” pada tempat yang sama script tersebut disimpan. Maka script sudah siap dicoba untuk meng-upload file yang akan diletakkan pada folder “uploads”.
Fungsi move_uploaded_file() digunakan untuk memindahkan file dari folder “temp” ke folder yang telah kita tentukan. Kemudian darimana saya mendapatkan kedua parameter tersebut? Untuk menjelaskan hal tersebut, lebih mudah jika kita langsung mempraktekannya.
Sekarang tuliskan kode dibawah ini untuk menggantikan fungsi move_uploaded_file() di atas, atau letakkan saja di bawahnya, tanpa menghapus fungsi tersebut.
print_r($_FILES);
Fungsi print_r($_FILES)
akan menampilkan isi dari variable $_FILES
. Lakukan upload file sekali lagi, maka selain meng-upload file ke server, browser akan menampilkan isi dari variable $_FILES
.
Array
(
[berkas] => Array
(
[name] => Boston City Flow.jpg
[type] => image/jpeg
[tmp_name] => /tmp/php1UOmUg
[error] => 0
[size] => 339773
)
)
Pada contoh di atas terlihat variable $_FILES
bertipe array. Untuk mengakses indeks “name” dengan menggunakan $_FILES['berkas']['name']
, sedangkan untuk mengakses indeks “tmp_name” caranya sama, $_FILES['berkas']['tmp_name']
.
Bersambung ke catatan berikutnya untuk meng-upload banyak file sekaligus menggunakan HTML5 dan PHP. Source code lengkap tutorial ini ada di bawah. Kalau ada pertanyaan, silakan tinggalkan komentar.
<!DOCTYPE html> <html> <head> <title>upload file</title> <meta charset="utf-8"> </head> <body> <div> <form action="" method="post" enctype="multipart/form-data"> <p> <input type="file" name="berkas" /> <input type="submit" value="Upload" /> </p> </form> </div> </body> </html> <pre> <?php if(isset($_FILES['berkas'])) { move_uploaded_file($_FILES['berkas']['tmp_name'], "uploads/{$_FILES['berkas']['name']}"); print_r($_FILES); } ?>
Catatan: Tulisan ini juga pernah diterbitkan di sini. Saya terbitkan kembali karena saya berencana membuat catatan berseri.
Mengenal PHP Array
Artikel ini pernah diterbitkan di http://belajarwebdesign.com/web-programming/mengenal-php-array/
Bagi yang pernah belajar programming pasti sudah tidak asing lagi dengan array. Dalam berbagai bahasa pemrograman yang saya pelajari, array(larik) adalah kumpulan data bertipe sama yang menggunakan nama sama. Namun pada PHP, array memiliki kelebihan yang tidak dimiliki oleh bahasa pemrograman yang lain. Kelebihan inilah yang membuat array pada PHP menjadi sangat powerfull.
Pertama-tama array pada PHP sama seperti pada bahasa pemrograman yang lain.
$arr = array(1, 2, 3); echo $arr[0]; // 1 echo $arr[1]; // 2 echo $arr[2]; // 3
Kemudian array pada PHP juga merupakan sebuah hash table.
$arr = array('satu'=>1, 'dua'=> 2, 'tiga'=>3); echo $arr['satu']; // 1 echo $arr['dua']; // 2 echo $arr['tiga']; // 3
Dan hebatnya, array pada PHP memiliki ukuran yang dinamis.
$arr = array('satu'=>1, 'dua'=> 2, 'tiga'=>3); $arr['empat'] = 4; echo $arr['empat']; //4
Belum berhenti sampai di situ, array pada PHP juga bisa dengan mudah digabungkan.
$arr1 = array(1=>'satu', 2=>'dua'); $arr2 = array(3=>'three', 4=>'four'); $arr3 = $arr1 + $arr2; print_r ($arr3); //Array ([1]=>satu [2]=>dua [3]=>three [4]=>four)
Masih banyak kelebihan-kelebihan array pada PHP yang dapat dilihat di http://php.net/manual/en/language.types.array.php
Mengubah Element Position secara Dinamis dengan jQuery
Baru-baru ini situs jejaring sosial Facebook menambah sebuah widget kecil di sebelah kanan atas pada halaman Home masing-masing user, yang berisi aktifitas terbaru dari teman-teman kita. Uniknya, ketika saya menggulir halaman ke bawah, alih-alih menghilang dari layar monitor, widget tersebut malah menempel pada menu bar biru yang menjadi ciri khas Facebook.
Meskipun beberapa orang menganggap fitur tersebut tidak penting, tapi efek yang dihasilkannya sangat keren. Sebenarnya saya pernah menggunakan efek seperti itu pada beberapa proyek dengan bantuan jQuery. Di bawah ini adalah kode yang saya gunakan untuk menghasilkan efek tersebut.
$(document).ready(function() { var menu = $("#menu"); var menuOriTop = menu.offset().top; var view = $(window); view.bind("scroll resize", function(){ var menuViewTop = view.scrollTop(); if ((menuViewTop > menuOriTop) && !menu.is(".menu-fixed")){ menu.removeClass("menu-absolute").addClass("menu-fixed"); } else if ((menuViewTop <= menuOriTop) && menu.is(".menu-fixed")){ menu.removeClass("menu-fixed").addClass("menu-absolute"); } }); }); [/code] Penjelasannya, kode <strong>jQuery</strong> di atas akan memeriksa apakah elemen menu telah digulir melewati batas atas mula-mula, jika sudah melewati, maka atribut <em>position</em> dari elemen menu akan diubah menjadi <em>fix</em>. Sebaliknya, jika elemen menu kurang dari batas atas mula-mula, maka atribut <em>position</em> akan diubah menjadi <em>absolute</em>. Untuk lebih memahami, akan saya berikan kode HTML dan CSS sederhana. Semoga cukup untuk menambah koleksi potongan kode Anda ;) <!DOCTYPE HTML> <html> <head> <title>Float Menu</title> <style type="text/css"> #header { height: 200px; width:800px; background-color: #3333FF; } .sidebar { float: left; width: 110px; border: 1px solid #e6e6e6; } .content { float: left; height: 2000px; width: 690px; margin-right:10px; background-color:#00FF00 } #menu { width:100px; height:200px; background-color: #F0F0F0; } div.menu-absolute { position: absolute; top: 210px; } div.menu-fixed { solid #E0E0E0; top: 10px; position: fixed; } .footer { clear: both; width: 800px; background-color:#FF3399 } </style> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> $(document).ready(function() { var menu = $("#menu"); var menuOriTop = menu.offset().top; var view = $(window); view.bind("scroll resize", function(){ var menuViewTop = view.scrollTop(); if ((menuViewTop > menuOriTop) && !menu.is(".menu-fixed")){ menu.removeClass("menu-absolute").addClass("menu-fixed"); } else if ((menuViewTop <= menuOriTop) && menu.is(".menu-fixed")){ menu.removeClass("menu-fixed").addClass("menu-absolute"); } }); }); </script> </head> <body> <div id="header">Header</div> <div class="content">content here</div> <div class="sidebar"> <div id="menu" class="menu-absolute">Menu Float</div> </div> <div class="footer">footer</div> </body> </html>