Codeigniter
April 23,2016 Sandro Brayen Dibaca 15978 kali Javascript
Apa kabar semuanya, semoga dalam keadaan sehat dan baik baik saja.
Pada artikel kali ini saya akan membagikan tutorial cara membuat menu select
(combo box) dinamis menggunakan ajax dan php.
1. Intro
Kita tau bersama bahwa menu select atau combo box sangat diperlukan didalam
membuat aplikasi. Bukan hanya sebagai pelengkap saja, melainkan menu select
sudah merupakan sebuah kebutuhan didalam setiap form inputan.
Selain 'input', select juga pasti akan anda jumpai pada setiap form yang
berhubungan dengan registrasi, survei, kuis, maupun form administratif lainnya.
Maka dari itu setiap programmer diharuskan dan wajib tau penggunaan menu ini,
dan yang paling penting adalah 'bisa dinamis'.
Misalnya bayangkan jika dalam aplikasi terdapat 3 buah menu select, dan memiliki
kondisi dimana pilihan/option yang ada pada menu ke-3 hasilnya bergantung pada
apa yang dipilih pada menu ke-2, dan pilihan/option yang ada pada menu ke-2
bergantung pada apa yang dipilih pada menu pertama.
Prakteknya (dahulu), agar bisa memenuhi kondisi ini, masing masing menu akan
disiapkan kedalam 3 buah halaman yang berbeda.
Ketika user memilih data pada menu select pertama, browser akan mengalihkan
(mereload) halaman ke halaman menu select kedua.
Dan data yang dipilih oleh user pada menu select pertama akan dijadikan sebagai
parameter pada select yang kedua, agar supaya halaman menu select yang kedua
dapat menghasilkan pilihan data sesuai pilihan menu pertama. Begitupun setelah
user memilih data pada menu kedua, browser akan mengalihkan ke halaman menu
select ke tiga.
Cara diatas memang merupakan metode atau praktik untuk menghasilkan menu
dinamis, tapi masih bukanlah cara paling efisien.
Karena jika hanya menggunakan parameter 'dinamis' nya saja, jelas cara diatas sah-
sah saja. Tapi bagaimana jika perameter lainnya mulai diterapkan? misalnya: user
firendly, resource, performa, dan waktu. Parameter parameter inilah sangat
diperlukan oleh aplikasi aplikasi modern era ini, bukan hanya sekedar 'dinamis'
saja.
Terima kasih banyak dengan hadirnya Ajax (Asynchronous JavaScript and
XML)! Karena dengan kehadirannya, menu yang harus kita pisahkan didalam 3
halaman tadi, sekarang sudah bisa kita tampilkan secara bersama-sama didalam 1
halaman saja. Ketika memilih data pada menu pertama,pilihan pada menu select
kedua akan langsung muncul tanpa perlu lagi direload atau mengalihkan halaman.
Karena request perpindahan halaman seperti cara diatas sudah digantikan dengan
cara Asynchronous request.
Sebagai latihan kita kali ini kita akan menggunakan kasus pemilihan provinsi,
kabupaten/kota, kecamatan lalu kelurahan/desa.
Pada tutorial kali ini kita akan menggunakan framework kesayangan kita yaitu
framework Codeigniter , dan untuk manghandel Ajax kita akan menggunakan libary
Jquery.
Dan pastinya untuk mengasilkan data tentu diperlukan databasenya. Untuk
database nya silahkan download datanya disini. Dan silahkan diekstrak.
Buka phpmyadmin. Buat database baru dengan nama apa saja, misalnya 'latihan'.
Lalu import file indonesia.sql yang kamu download tadi kedalamnya.
Jika berhasil, database kamu akan memiliki table-table seperti gambar dibawah ini.
Penjelasan table
provinces = Povinsi
regencies = Kabupaten- kota
districts = kecamatan
villages = kelurahan - Desa
Sekarang, buat folder project baru pada localhost kamu. Buat folder apa nama apa
saja, misalnya folder 'latihan'. Lalu ekstrak file file codeigniter didalam nya.
buka folder application/config lalu edit file database.php.
Atur nama databasenya,username,dan password.
Buat file php baru sebagai controller didalam folder application/controllers buat
dengan nama misalnya Select.php
Sekarang buat file php baru sebagai model didalam folder application/models buat
dengan nama misalnya Model_select.php
Buat file php baru sebagai view didalam folder application/views buat dengan
nama misalnya view_select.php
Sebagai assetnya, kita akan menggunakan 'bootstrap' sebagai bantuan CSS.
Buat folder seperti ini 'assets/bootstrap' lalu didalamnya file file Bootstrap dan
jQuery
3. Coding
<?php
function __construct(){
parent::__construct();
$this->load->database();
$this->load->helper(array('url'));
$this->load->model('model_select');
function index(){
$data['provinsi']=$this->model_select->provinsi();
$this->load->view('view_select',$data);
function ambil_data(){
}
<html>
<head>
</head>
<body>
<div class='container'>
<div class='row'>
<div class='col-md-5'>
<div class='form-group'>
<label>Provinsi</label>
<select class='form-control' id='provinsi'>
<option value='0'>--pilih--</option>
<?php
foreach ($provinsi as $prov) {
echo "<option value='$prov[id]'>$prov[name]</option>";
}
?>
</select>
</div>
<div class='form-group'>
<label>Kabupaten/kota</label>
<select class='form-control' id='kabupaten-kota'>
<option value='0'>--pilih--</option>
</select>
</div>
<div class='form-group'>
<label>Kecamatan</label>
<select class='form-control' id='kecamatan'>
<option value='0'>--pilih--</option>
</select>
</div>
<div class='form-group'>
<label>Kelurahan/desa</label>
<select class='form-control' id='kelurahan-desa'>
<option value='0'>--pilih--</option>
</select>
</div>
</div>
</div>
</div>
</body>
</html>
<?php
function __construct(){
parent::__construct();
function provinsi(){
$this->db->order_by('name','ASC');
$provinces= $this->db->get('provinces');
return $provinces->result_array();
function kabupaten($provId){
}
function kecamatan($kabId){
function kelurahan($kecId){
<?php
{
function __construct(){
parent::__construct();
$this->load->database();
$this->load->helper(array('url'));
$this->load->model('model_select');
function index(){
$data['provinsi']=$this->model_select->provinsi();
$this->load->view('view_select',$data);
function ambil_data(){
$modul=$this->input->post('modul');
$id=$this->input->post('id');
if($modul=="kabupaten"){
echo $this->model_select->kabupaten($id);
}
else if($modul=="kecamatan"){
}
else if($modul=="kelurahan"){
}
}
}
Pada file application/models/Models_select.php
Tambahkan juga code didalamnya
<?php
function __construct(){
parent::__construct();
function provinsi(){
$this->db->order_by('name','ASC');
$provinces= $this->db->get('provinces');
return $provinces->result_array();
function kabupaten($provId){
$kabupaten="<option value='0'>--pilih--</pilih>";
$this->db->order_by('name','ASC');
$kab= $this->db->get_where('regencies',array('province_id'=>$provId));
return $kabupaten;
}
function kecamatan($kabId){
function kelurahan($kecId){
<script type="text/javascript">
$(function(){
$.ajaxSetup({
type:"POST",
url: "<?php echo base_url('index.php/select/ambil_data') ?>",
cache: false,
});
$("#provinsi").change(function(){
var value=$(this).val();
if(value>0){
$.ajax({
data:{modul:'kabupaten',id:value},
success: function(respond){
$("#kabupaten-kota").html(respond);
}
})
}
});
$("#kabupaten-kota").change(function(){
});
$("#kecamatan").change(function(){
});
})
</script>
Refresh browser kamu. Sekarang ketika kamu memilih sebuah provinsi, maka
daftar kabupaten dan kota sudah tersedia untuk dipilih
Kini waktunya menyelesaikan sisa codingnya
file application/controllers/Select.php
<?php
function __construct(){
parent::__construct();
$this->load->database();
$this->load->helper(array('url'));
$this->load->model('model_select');
function index(){
$data['provinsi']=$this->model_select->provinsi();
$this->load->view('view_select',$data);
function ambil_data(){
$modul=$this->input->post('modul');
$id=$this->input->post('id');
if($modul=="kabupaten"){
echo $this->model_select->kabupaten($id);
}
else if($modul=="kecamatan"){
echo $this->model_select->kecamatan($id);
}
else if($modul=="kelurahan"){
echo $this->model_select->kelurahan($id);
}
}
file application/models/Models_select.php
<?php
function __construct(){
parent::__construct();
function provinsi(){
$this->db->order_by('name','ASC');
$provinces= $this->db->get('provinces');
return $provinces->result_array();
}
function kabupaten($provId){
$kabupaten="<option value='0'>--pilih--</pilih>";
$this->db->order_by('name','ASC');
$kab= $this->db->get_where('regencies',array('province_id'=>$provId));
return $kabupaten;
function kecamatan($kabId){
$kecamatan="<option value='0'>--pilih--</pilih>";
$this->db->order_by('name','ASC');
$kec= $this->db->get_where('districts',array('regency_id'=>$kabId));
return $kecamatan;
}
function kelurahan($kecId){
$kelurahan="<option value='0'>--pilih--</pilih>";
$this->db->order_by('name','ASC');
$kel= $this->db->get_where('villages',array('district_id'=>$kecId));
return $kelurahan;
}
file application/views/views_select.php
<html>
<head>
<script type="text/javascript">
$(function(){
$.ajaxSetup({
type:"POST",
url: "<?php echo base_url('index.php/select/ambil_data') ?>",
cache: false,
});
$("#provinsi").change(function(){
var value=$(this).val();
if(value>0){
$.ajax({
data:{modul:'kabupaten',id:value},
success: function(respond){
$("#kabupaten-kota").html(respond);
}
})
}
});
$("#kabupaten-kota").change(function(){
var value=$(this).val();
if(value>0){
$.ajax({
data:{modul:'kecamatan',id:value},
success: function(respond){
$("#kecamatan").html(respond);
}
})
}
})
$("#kecamatan").change(function(){
var value=$(this).val();
if(value>0){
$.ajax({
data:{modul:'kelurahan',id:value},
success: function(respond){
$("#kelurahan-desa").html(respond);
}
})
}
})
})
</script>
</head>
<body>
<div class='container'>
<div class='row'>
<div class='col-md-5'>
<h3>Menu Select Dinamis</h3>
<div class='form-group'>
<label>Provinsi</label>
<select class='form-control' id='provinsi'>
<option value='0'>--pilih--</option>
<?php
foreach ($provinsi as $prov) {
echo "<option value='$prov[id]'>$prov[name]</option>";
}
?>
</select>
</div>
<div class='form-group'>
<label>Kabupaten/kota</label>
<select class='form-control' id='kabupaten-kota'>
<option value='0'>--pilih--</option>
</select>
</div>
<div class='form-group'>
<label>Kecamatan</label>
<select class='form-control' id='kecamatan'>
<option value='0'>--pilih--</option>
</select>
</div>
<div class='form-group'>
<label>Kelurahan/desa</label>
<select class='form-control' id='kelurahan-desa'>
<option value='0'>--pilih--</option>
</select>
</div>
</div>
</div>
</div>
</body>
</html>