Thursday, October 29, 2015

Memahami Codeigniter menggunakan AJAX

Beberapa hal yang perlu dituliskan agar tidak lupa. Berikut adalah tulisan tentang konsep dasar tentang membuat sebuah aplikasi menampilkan menggunakan Codeigniter, yang dibantu fungsi javascript atau AJAX. Tulisan ini hanya untuk membantu memahami konsep dasar Pemrograman menggunakan Codeigniter. Langsung saja yang perlu disiapkan adalah codeigniter 2.0 atau versi keatas.
Tulisan ini difokuskan pada bagian view dan controller. Berikut adalah contoh script Controller dan view berikut penjelasannya sesuai kemampuan saya untuk menjelaskan.

Pertama kita main di controller. Buat file dengan nama c_test.php di dalam folder controller.
Setelah itu tuliskan script didalam c_test.php dibawah ini :


<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class c_test extends MX_Controller {
      
       public function __construct(){
             parent::__construct();
             $this->load->library(array('session','encrypt','form_validation'));
       }

       function index(){
             $this->load->view('v_test');
       }

       function v_test_js(){
             $this->load->view('v_test_js');
       }

       function tampil(){
          $user = $this->input->post('user');
          $password = $this->input->post('password');
          echo "<script>alert('berhasil');</script>";
          echo "<script>$('#user').html('".$user."');</script>";
          echo "<script>$('#password').html('".$password."');</script>";
          echo "<script>document.getElementById('tampil').style.display = '';</script>";
       }

}
 
Keterangan :

Script dibawah selalu ditulis disetiap controller yang saya buat untuk mendefinisikan fungsi-fungsi.


<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class c_test extends MX_Controller {
      
       public function __construct(){
             parent::__construct();
             $this->load->library(array('session','encrypt','form_validation'));
       }

               #Tempat menuliskan fungsi-fungsi pada controller.
}


Controller berfungsi mengatur yang ditampilkan pada browser. Setiap fungsi di controller bisa dipanggil melalui browser sesuai dengan lokasinya. Misal nama folder ci’nya adalah ikd, nama file’nya c_test.php. Maka pada browser bisa memanggil localhost/ikd/c_test. Nama class harus sesuai dengan nama file’nya.

class c_test extends MX_Controller {

 Kebetulan disini saya menggunakan hmvc yang memudahkan untuk mengatur folder controller, view, dan model’nya sesuai dengan nama modulenya. Disini saya memiliki folder ci dengan nama ikd, dan mempunyai module dengan nama test, nama file controller c_test.php, didalam file c_test.php ada function index yang berfungsi menampilkan default ketika kita memanggil file Controller tersebut. Jadi dengan adanya tambahan module maka di path browser saya dapat memanggil controller dengan path : localhost/ikd/test/c_test. Akan menampilkan view yang diload oleh index.

function index(){
$this->load->view('v_test');
}

Selanjutnya disini saya membuat fungsi v_test_js. V_test_js memanggil view v_test_js yang isinya nanti adalah semua javascript yang digunakan pada v_test. Kenapa tidak dituliskan jadi satu dengan v_test karena biar tidak campur dengan html sehingga untuk memantenancenya lebih mudah.

function index(){
$this->load->view('v_test');
}

Selanjutnua saya juga membuat fungsi tampil. Fungsi ini merupakan hasil setelah nanti di view terdapat aksi untuk klik button dan ditangkap difungsi javascript yang nantinya terus dilempar ke fungsi ini menggunakan AJAX.

//nama fungsi tampil
function tampil(){
      
//menangkap variable yang dikirim dari ajax yang ada di v_test_js.php
$user = $this->input->post('user');
$password = $this->input->post('password');

//menampilkan hasil menggunakan javascript
//menampilkan alert berhasil
echo "<script>alert('berhasil');</script>";

//menampilkan user dan password pada div user dan password di file v_test.php
       echo "<script>$('#user').html('".$user."');</script>";
       echo "<script>$('#password').html('".$password."');</script>";

       //menghilangkan display none sehingga tampilan user dan password dapat terlihat
       //display sebelumnya di div id=tampil adalah none
       echo "<script>document.getElementById('tampil').style.display = '';</script>";
}


Kedua Kita main di view. Buat view dengan nama v_test.php didalamfolder view. Tuliskan script html didalam v_test.php, scriptnya kurang lebih adalah seperti ini :


<html>
<body>
       <fieldset>
             <legend>Login</legend>
             <input name="user" type="text" /><br/>
             <input name="password" type="text" /><br/>
             <button onclick="login()">Masuk</button>
       </fieldset>
       <div id="tampil" style="display:none;">
             <fieldset>
                    <legend>User passsword</legend>
                    <div id="user"></div>
                    <div id="password"></div>
             </fieldset>
       </div>
</body>
</html>

<?php echo modules::run("test/c_test/v_test_js"); ?>
 
Keterangan :

Script diatas adalah view yang menampilkan input user dan input password. Perhatikan pada input dan div id pada secript diatas. Kita mulai dengan name setiap input, karena nanti di Ajax name ini sepagai identitas untuk menangkap isi dari input tersebut misal :

<input name="user" type="text" /><br/>

Dijavascript nanti kita bisa manangkap isi input name user dengan script dibawah ini

var user1 = $('input[name=user]').val();

Setelah itu kita bisa lihat setiap id pada div. Id setiap div ini membantu untuk mengidentivikasi div sehingga isi dari div tersebut dapat kita ubah sesuai dengan keinginan kita menggunakan javascript. Misal id user <div id="user"></div> Kita bisa mengubah isi div id user yang sebelumnya kosong menjadi isi dengan text user dengan script $(‘#user’).html(‘user’); script ini ditulis dijavascript.

Pada button terdapat onclick=login(), ini jika button diklik maka akan menjalankan fungsi login() yang terdapat pada file v_test_js.php.

<button onclick="login()">Masuk</button>

Script yang paling bawah adalah script php yang berfungsi memanggil atau menambahkan view v_test_js.php.

<?php echo modules::run("test/c_test/v_test_js"); ?>

Ketiga kita bisa membuat v_test_js.php didalam folder view juga. Kurang lebih isi filenya adalah script berikut :


<script type="text/javascript" src="<?php echo base_url(); ?>template/js/jquery.js"></script>
<script type="text/javascript" src="<?php echo base_url(); ?>template/js/jquery-1.11.1.min.js"></script>

<script>
       function login(){
             var user1 = $('input[name=user]').val();
             var password1 = $('input[name=password]').val();

             $.ajax({
                    type: 'POST',
                    url: "<?php echo base_url(); ?>test/c_test/tampil",
                    data: {user:user1,password:password1},
                    success:function(data){
                           $('#test').html(data);
                    }
             });
       }
</script>
<div id="test"></div>
 
Keterangan :

<script type="text/javascript" src="<?php echo base_url(); ?>template/js/jquery.js"></script>
<script type="text/javascript" src="<?php echo base_url(); ?>template/js/jquery-1.11.1.min.js"></script>

Script diatas berfungsi memanggil library agar ajax bisa berjalan. Lokasinya disesuaikan dengan penempatannya. Didalam codeigniter menggunakan <?php echo base_url(); ?>  untuk menampilkan base url Ci kita, kalo disini berarti menampilkan loaclhost/ikd, selanjutnya disambung dengan path lokasinya.

<script>
       function login(){
             var user1 = $('input[name=user]').val();
             var password1 = $('input[name=password]').val();

             $.ajax({
                    type: 'POST',
                    url: "<?php echo base_url(); ?>test/c_test/tampil",
                    data: {user:user1,password:password1},
                    success:function(data){
                           $('#test').html(data);
                    }
             });
       }
</script>

Fungsi login() berisi script ajax yang nantinya akan memanggil fungsi dicontroller dan mengirim beberapa variable yang akan ditangkap pada controller.

#Menangkap variable user dan password menggunakan javascript
var user1 = $('input[name=user]').val();
var password1 = $('input[name=password]').val();

#Lokasi Controller yang dituju
url: "<?php echo base_url(); ?>test/c_test/tampil",

#Variable yang dikirimkan pada controller
data: {user:user1,password:password1},

#Mengganti isi div id tes dengan dengan data
#data adalah tampilan dari isi controller dengan nama fungsi tampil
$('#test').html(data);

#berubah isinya ketika fungsi login digalankan
<div id="test"></div>

Jika saya mengakses localhost/ikd/test/c_test maka akan tampil



Jika diklik login maka yang akan tampil adalah alert berhasil dan tampilan dibawahnya :



Struktur file yang saya buat



Mungkin hanya ini dulu yang bisa saya tuliskan. Apabila ada yang ingin ditanyakan silahkan, nanti saya coba menjelaskan dan sekalian belajar juga agar bisa lebih baik lagi, Thanks Yaaaa..... laen waktu disambung lagi.