Terkadang saya suka sekali dengan Admin Panel Builder dari Dolphin Community Builder, wow, untuk merubah tata letak block website bisa hanya dengan drag and drop. Begitu juga untuk mengubah tata letak setiap menu, semuanya dengan easy and user friendly. Jauh lebih mudah untuk end user ketimbang Joomla yang masih menggunakan cara kuno. Drag and Drop builder ini nantinya juga akan kita implementasikan untuk MeTu+ release alpha 10 berikutnya. Dalam versi release alpha 10 nanti kita juga mengkode ulang sebagian besar script codeigniternya. Untuk screenshot Drag and Drop builder ini dapat anda lihat pada screenshot berikut ini:
Disini, kita akan mencoba menggunakan Php Mysql JQueryUI untuk membuat simple Drag and Drop builder.
Screnshot metu:
Tutorial ini juga akan banyak anda temui di internet yaitu Drag and Drop JQueryUI, bahkan JQueryUI sendiri pada dokumentasinya (bisa dilihat saat anda mendownload JQueryUI) juga terdapat banyak sekali sample/contoh drag and drop builder. Tetapi pada tutorial ini akan ada banyak perbedaan dan lebih mudah dimengerti, sangat simple dan tersedia source code yang dapat anda download dan anda coba install di Localhost maupun di server online anda.
Oke, mari kita mulai berikut adalah screenshot dari structur folder kita:
Sama seperti pada script kebanyakan, anda bisa melihat structure folder kita seperti diatas. Penjelasan dari gambar diatas adalah sebagai berikut:
- Kita membuat sebuah install_sql.sql dalam folder install, ini kita gunakan untuk menginstall table dalam database yang kita buat nanti.
- Kita juga membuat sebuah script untuk koneksi ke database tentu dengan password dan username dari database kita, nah file ini adalah connect_to_database.php
- Kita membutuhkan sebuah front end page yang merupakan antarmuka dengan user, file itu adalah index.php
- Kita juga membutuhkan sebuah script untuk memproses semua instruksi baik untuk meloading data dari database maupun mengupdate database yaitu process.php
- Kita membutuhkan sebuah permak style untuk membuat situs kita jauh lebih bagus dan enak dipandang mata, file itu adalah css/style.css
- Nah, yang paling penting, kita menggunakan JQuery dan JQueryUI yang masin masing dapat anda lihat pada screenshot. Versi keduanya dapat anda ganti dengan versi yang baru. Disini saya menggunakan versi lama karena dilihat dari ukuran filenya jauh lebih kecil.
Oke, mari terlebih dahulu kita bahas install_sql.sql, script dapat anda lihat pada kode di bawah ini:
Anda bisa lihat, pada kode diatas, kita membuat 2 buah halaman yaitu halaman home dan halaman account, masing-masing halaman terdapat 2 kolom, yaitu kolom 1 dan 2, masing masing kolom terdapat beberapa block. Dan setiap block memiliki order atau urutan sendiri sendiri.
Then, mari kita buat koneksi dengan database dan table yang telah kita buat
connect_to_database.php
Berikutnya, kita akan membuat front end user yaitu index.php
Inilah tempat dimana semua process kita dihandle,
process.php
terdapat 4 fungsi dalam process.php diatas, yaitu showBlock(), saveBlock(), showHeader(), dan showFooter(). Untuk dua fungsi terakhir adalah digunakan untuk menampilkan head tag dan script pada html, kita akan membahas ini di akhir nanti. Nah, sekarang mari kita perhatikan showBlock() function di atas bila kita jadikan html maka fungsi ini akan menjadi:
Ok, sekarang mari kita kembali ke fungsi showBlock(), terlebih dahulu kita akan menyeleksi column, bila column telah terseleksi langsug kita akan menyeleksi item item di database sesuai dengan column. Mungkin anda bertanya, pada fungsi tersebut ada sebuah code seperti di bawah ini:
code di atas digunakan untuk menghindari hasil menyeleksi column yang dobel, mungkin anda punya cara lain dalam mengatasi problem ini???? anda bisa memberikan komentar di bawah artikel ini. :) untuk fungsi saveBlock() akan kita bahas nanti di akhir.
Fungsi showHeader() kita adalah seperti pada kode di bawah ini:
Script diatas akan men-generate salah satu fungsi JQueryUI yang sangat penting untuk system drag and drop kita Dengan fungsi sortable ini, maka kita sudah bisa membuat drag and drop element. Silahkan anda lihat hasil generate dari fungsi showHeader() di atas seperti berikut ini:
Untuk anda yang memang sudah familiar dengan JQueryUI pasti bisa dengan sangat mudah memahami kode di atas. Kita akan mengimplementasikan fungsi 'sortable' kepada setiap element yang memiliki class 'column_builder'.
connectWith digunakan untuk koneksi antar div yang memiliki class 'column_builder' sehingga antar div yang memiliki class yang sama dapat dilakukan drag and drop.
handle adalah element yang bisa kita jadikan sebagai handle dari drag and drop.
cursor jelas, yaitu sebuah style untuk mouse saat kita sedang melakukan drag and drop.
placeholder merupakan tempat saat kita akan menempatkan element yang kita drag and drop, perhatikan screenshot animasi di atas, saat kita akan menempatkan element maka akan muncul kotak dengan border garis putus putus, itulah placeholder kita.
opacity merupakan opacity saat kita melakukan dragging, sehingga terlihat element yang kita drag menjadi transparent.
dan yang terakhir, saat drag and drop telah selesai kita lakukan (stop) maka kita akan memanggil fungsi untuk menyimpan posisi dari element yang didrag yaitu savePosition.
fungsi savePosition dalam showHeader adalah sebagai berikut:
dari fungsi JQueryUI di atas kita dapat memahami bahwa saat drag and drop selesai maka kita memanggil fungsi savePosition. Dalam fungsi ini terlebih dahulu kita menampilkan tulisang 'saving...' kemudian kita mengumpulkan data kedalam array items sebelum akhirnya array items kita masukan ke dalam variable shortorder untuk di kirim ke url http://localhost/folder/index.php?action=save.
Nah, dari sini bisa dimengerti ya, semua data dalam bentuk array json ini kita kirimkan ke dalam index.php?action=save. Coba anda lihat kembali kode index.php di atas. $_GET['action']== 'save' akan memanggil fungsi saveBlock() seperti pada code dibawah ini:
pasti ada yang bingung, kenapa kita memakai:
$item = explode("_",$value2['id']);
$value2['id'] = $item[1];
$col = explode("_", $value2['column']); //split
$value2['column'] = $col[1];
sebetulnya simple saja, fungsi savePosition dalam JQueryUI kita tadi mengirimkan variable 'item_1', 'item_2' serta 'column_1', 'column_2', dalam hal ini kita ingin mendapatkan id dan column, sehingga kita harus hanya mengambil angka saja. Untuk itulah kita bisa menggunakan fungsi explode seperti diatas untuk men-split ke dalam array.
Nah, bila semua telah selesai, kita pun bisa melakukan update query seperti ini:
$query = "UPDATE `metu_builder` SET `column`='$new_column', `order`='$new_order' WHERE `ID`='$id'";
Untuk lebih jelasnya, silahkan download source code, untuk installasi anda bisa membaca di folder install/
Anda pun juga dapat melihat demo nya.