Codeigniter
Codeigniter
Perubahan Struktur
Sesuai saran pengguna CodeIgniter, kebanyakan menyarankan untuk mengubah struktur file. Oleh
karenanya, saya juga ikut2an ubah struktur. Ok, struktur awal CodeIgniter seperti ini
FolderProject
-System
· Application
· config
· controllers
· errors
· helpers
· hooks
· viewers
· models
· dll
· cache
· codeigniter
· database
· fonts
· helpers
· dll
-index.php
FolderProject
-System
· cache
· codeigniter
· database
· fonts
· helpers
· dll
-Application
· config
· controllers
· errors
· helpers
· hooks
· viewers
· models
· dll
-Asset
· img
· css
· script
-index.php
di file /application/config/config.php
Nantinya kita mungkin akan ketemu fungsi anchor() yang sama dengan <a href=””> ataupun img()
yang sama dengan <img src=””>. Supaya hasilnya sama dengan yang diinginkan, maka kita akan tetap
menggunakan yang versi CodeIgniter, karena dengan demikian, link-nya lebih gampang ditulis, sebab
nantinya kalau pakai <a href=””> maka kita akan kewalahan dengan link yang akan tidak biasa.
function index()
{
//isi halaman kalau langsung mengakses http://url/index.php/laohe/
}
function foo()
{
//isi halaman kalau panggil di http://url/index.php/laohe/foo
}
function bar($id)
{
//misalnya $id itu diisi “xxx” maka url diakses http://url/index.php/laohe/bar/xxx
}
function _tersembunyi()
{
//fungsi yang tidak dapat diakses di url. Untuk dipakai bukan untuk diakses
}
}
//NB:nama class harus kapital yang depan. Nama file disave sebagai mycontroller.php di dalam folder
controllers
Cara pakai
ini Controller nya, dengan namafile : /system/application/controllers/mycontroller.php
<?php
class Mycontroller extends Controller
{
function Mycontroller()
{
parent::Controller();
}
function index()
{
$this->load->view('myview1');/*nama view bebas sesuka kamu, yang penting nama
file sama*/
}
function contoh2()
{
$data['var1'] = 'Ini ini nilai variable 1';
$data['xxx'] = 24;
$this->load->view('myview2', $data); //ini tampil view yang lain dengan kirim nilai.
}
}
function dapathasil()
{
//taruh fungsi supaya kalau mau akses db lewat model.
}
}
?>
Contoh MVC Keseluruhan
Kasus:
Tampilkan produk dengan menggunakan Model, View serta Controller. Nama tabel yang akan diakses
bernama msproduk. Sedangkan atribut-atribut pada tabel tersebut berupa idkategori, nama, parent,
isleaf, gambarfolder, gambarbanner.
Jawab:
function tampilproduk($idkategori='*')
{
$query = $this->db->query("SELECT idproduk, namaproduk, ukuran, jumlah, idkategori,
gambar1, gambar2, carapakai FROM msproduk WHERE idkategori='$idkategori'");
return $query;
}
function tampilkategori($parent='*')
{
$query = $this->db->query("SELECT idkategori,nama, parent, isleaf, gambarfolder,
gambarbanner FROM mskategori WHERE parent='$parent'");
return $query;
}
?>
Lalu kita buat Controller di folder controllers dengan nama product.php
(/application/controllers/product.php)
Codingnya:
<?php
class Product extends Controller
{
function Product()
{
parent::Controller();
}
function index()
{
$this->load->model('Productmodel'); //buka model
$data['produk'] = $this->Productmodel->tampilproduk(); //panggil fungsi model trus smpn var
$this->load->view('productview',$data); //memanggil view
}
}
?>
Lalu kita buat View di folder views dengan nama productview.php(Sebetulnya pembuatan view
biasanya berbarengan dengan pembuatan controller bukan sesudah controller. Disini hanya contoh)
Buat file di /application/views/productview.php
Codingnya:
<html>
<title>Product</title>
<body>
<?php
foreach ($produk->result() as $row){
echo $row->idproduk."</td>";
echo $row->namaproduk;
echo $row->ukuran;
echo "<img src='".$row->gambar1."' alt='".$row->namaproduk."'/>";
echo "<br/>";
}
?>
</body>
</html>
Menangani Database
Sebelum mulai apa-apa kamu harus tulis ini dulu :
$this->load->database();
Kalau misalnya malas tiap kali mau utak-atik database harus tulis coding gitu kamu bisa taruh di
autoload (ada di /application/config/autoload.php) tambahkan dibagian libraries jadi gini
$autoload['libraries'] = array('database');
Melakukan query
Untuk query ada 2 cara, secara objek atau array.
Versi objek:
$query = $this->db->query('SELECT name, title, email FROM my_table');
echo $row->title;
echo $row->name;
echo $row->email;
Disini diperhatikan bahwa dia menggunakan foreach. Jadi kita tidak pakai while seperti pada
mysql_query().
Versi array:
$query = $this->db->query('SELECT name, title, email FROM my_table');
echo $row['title'];
echo $row['name'];
echo $row['email'];
}
Yang membedakannya hanya pada yang satu $query->result() yang satu lagi $query->result_array().
Jadi kalau array aksesnya dengan menggunakan cara array.
if ($query->num_rows() > 0)
//Di sini cek query kosong atau tidak
{
echo $row->title;
echo $row->name;
echo $row->body;
} else{
echo “Tidak ada hasil”;
}
$this->db->query($sql);
Active Record, fungsi tanpa mengandalkan SQL
Untuk melakukan fungsi select, update, insert, delete juga bisa menggunakan ActiveRecord yang sudah
disediakan CodeIgniter. Dengan fungsi ini, kita tidak usah mengetik sintaks SQL, tetapi cukup panggil
fungsi.
echo $row->title;
);
$this->db->insert('mytable', $data);
Makna dari fungsi diatas adalah “INSERT INTO mstable(title, name, date) VALUES ('$title', '$name',
'$date') ”.
);
$this->db->where('id', $id);
$this->db->update('mytable', $data);
Arti dari coding diatas adalah “UPDATE mytable SET title='$title', name='$name', date='$date'
WHERE id='$id' “.
Contoh Active Record Delete (pakai fungsi delete() ,mungkin perlu dipadukan where() ):
$this->db->delete('mytable', array('id'=>$id));
Makna dari sintaks di atas yakni hapus record yang id-nya bernilai $id.
Sebetulnya sintaks ini sama saja dengan sintaks DELETE di SQL atau fungsi delete() di AR(Active
Record) tanpa where().
Mirip dengan empty table. Kecuali field yang auto-increment. Jika kita empty table maka angka auto-
increment tetap lanjut perhitungan sebelumnya. Jika truncate maka variabel akan mulai dari awal lagi.
Membuat Form
Mengapa menggunakan helper dan tidak langsung coding HTML saja langsung? Alasannya kalau kita
pakai yang sudah disediakan dia nantinya akan dengan mudah dapat menambah atribut dan hidden
field. Selain itu tingkat portabiliti code lebih tinggi, misalnya ketika URL berubah. Alasan lainnya,
elemen-elemen ini sudah divalidasi html nya. Jadi kalau misalnya value text adalah “</table>” maka
tidak akan merusak susunan form, karena akan diganti dengan karakter aman.
Makna dari sintaks itu adalah nantinya akan muncul tag HTML demikian
<form method="post" action="http:/example.com/index.php/email/send" />
Bisa juga kita membuat akhir dari Form dengan menggunakan echo
echo form_close();
Artinya:
<form method=”post” action=”http://example.com/index.php/email/send”/>
<input type=”hidden” name=”hdnnama” value=”joe”/>
<input type=”hidden” name=”hdnnumber” value=”123” />
List persamaan Form dengan form helper CodeIgniter
Satu hal yang diingat, kalau menggunakan form_upload() berarti kita menggunakan input type='file',
yang artinya form harus di set nilai enctype="multipart/form-data". Tinggal pakai
form_open_multipart() dengan cara :
echo form_open_multipart('/send/email');
Output Class sudah diinisialisasi secara otomatis, jadi tidak usah di load() lagi
Validasi Form
Biar lebih gampang harus kasih contoh keseluruhan. Jadi disini ada kasus dimana kita akan validasi
form registrasi. User akan memasukkan data ke form, jika semua syarat terpenuhi maka akan keluar
informasi yang diinput user, kalau salah maka akan tampilkan form dengan pesan kesalahan.
Kita perlu controller dan view. Untuk controller codingnya demikian:
<?php
class Register extends Controller
{
function Register()
{
parent::Controller();
}
function index()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('nama','Nama', 'trim|required');
$this->form_validation->set_rules('umur','Umur', 'trim|required|is_natural');
$this->form_validation->set_rules('alamat', 'trim|Alamat|required');
$this->form_validation->set_rules('sex', 'Sex', 'required');
$this->form_validation->set_rules('email','Email', 'trim|required|valid_email');
if ($this->form_validation->run()==false){
$this->load->view('feedbackview');
}else{
echo "Sukses <br/>";
$nama = $this->input->post('nama');
$umur = $this->input->post('umur');
$alamat = $this->input->post('alamat');
$jeniskelamin = $this->input->post('sex');
echo $nama."<br/>". $umur. "<br/>".$alamat. "<br/>" . $jeniskelamin;
}
}
}
?>
Penjelasan:
$this->load->library(‘form_validation’) untuk meload Class Form Validation supaya dapat
mengggunakan fungsi-fungsi validasi.
$this->form_validation->run() untuk melakukan validasi. Jika misalnya kita tidak melakukan
set_rules() maka hasilnya akan selalu false.
Penjelasan:
echo validation_errors(); akan menampilkan pesan error jika validasi salah. Karena saya taruh
sintaksnya diatas form, maka nantinya pesan error akan muncul disitu. Jadi peletakan ini tergantung
sesuai posisi yang diinginkan.
set_value('x') :Untuk mengisi objek itu lagi jika ternyata masih belum valid. Kalau dulunya kami
menggunakan Cookie dan ketik panjang2, sekarang tidak usah. Biasanya set_value() ditaruh di
parameter kedua, karena parameter tersebut memang untuk value/nilai
Template
Kita dapat menggunakan template di CodeIgniter, hanya sayang saja tidak tersedia built-in. Tapi jangan
sedih, karena saya sudah menemukan library buatan orang yang sangat sederhana untuk membuat
template. Download di
http://maestric.com/wiki/lib/exe/fetch.php?id=&cache=cache&media=php:ci_template_library3.zip
Kemudian taruh file Template.php yang ada dalam zip itu kedalam /system/libraries/
Cara Penggunaan:
Kalau biasanya untuk buka view kita menggunakan
$this->load->view('about', $data);
Hal yang harus diperhatikan adalah didalam template (dalam contoh ini berarti file templateview.php)
harus ada $contents (gak boleh nama lain) misalnya
<html>
<title>Halaman Utama</title>
<body>
<?=$contents ?>
</body>
</html>
Kalau misalnya ada lebih dari satu yang ingin dikirim kamu bisa buat variabel lain selain $contents.
Yang jelas $contents harus ada. Misalnya dibawah ini adalah contoh file templateview.php
<html>
<title> <?= $judul ?></title>
<body>
<?= contents ?>
</body>
</html>
Maka di controller kita tinggal mengetik begini (contoh yang sama dengan atas):
$this->template->set('title', 'Halaman Utama');
$this->template->load('templateview', 'about',$data);
Menggunakan Session
Untuk memanfaatkan session harus load dahulu
$this->load->library('session');
Untuk hapus
$this->session->unset_userdata(‘item’);
Hancurkan session
$this->session->sess_destroy();
Menggunakan Cookie
Untuk memanfaatkan cookie harus load dahulu
$this->load->helper(‘cookie’);
Delete cookie
delete_cookie($nama);
Paging
Untuk load menggunakan:
$this->load->library('pagination');
Contoh nyata:
Misalnya kita ingin menampilkan daftar produk. Sekedar diketahui jumlah produk itu adalah 23 buah.
Kita ingin setiap halaman hanya bisa menampilkan 5 produk.
Maka di controller kita harus setting. Controller ini bernama Main dengan alamat
/application/controllers/main.php
<?php
function Main()
{
parent::Controller();
}
function produk($id=1)
{
$this->load->model('Productmodel');
$this->load->library('pagination');
//pagination
$config['base_url']= 'index.php/main/produk/';
$config['total_rows'] = $this->Productmodel->maksproduk();
$config['per_page'] =5;
$this->pagination->initialize($config);
$data['paging']= $this->pagination->create_links();
//tampilproduk
$data['produk'] = $this->Productmodel->tampilproduk("limit $id,5");
/*intinya select * from msproduk limit $id, 5(lebih jelas lihat di model nantinya)*/
//meload view
$this->load->view('productview',$data);
}
function index()
{
}
}
echo $paging;
?>
Kalau ingin lebih mengerti model yang dipakai silahkan lihat ini:
<?php
function maksproduk()
{
$query = $this->db->query("SELECT idproduk FROM msproduk");
return $query->num_rows();
}
function tampilproduk($additional='',$idkategori='-1')
{
if ($idkategori==-1){
$query = $this->db->query("SELECT idproduk, namaproduk, ukuran, jumlah, idkategori,
gambar1, gambar2, carapakai FROM msproduk ".$additional);
}else{
$query = $this->db->query("SELECT idproduk, namaproduk, ukuran, jumlah, idkategori,
gambar1, gambar2, carapakai FROM msproduk WHERE idkategori like '$idkategori' ".
$additional);
}
return $query;
}
?>
Upload file
Untuk dapat menggunakannya harus load:
$this->load->library('upload');
function index()
{
$config['upload_path'] = './upload/';
$config['max_size'] = '100';
$config['allowed_types'] = 'gif|jpeg|png';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->upload->initialize('upload');
$this->upload->do_upload();
}
Kemudian di bagian view kita buat form untuk upload gambar dengan alamat
/applications/views/upload.php
echo form_open_multipart('/feedback'); //harus form_open_multipart() soalnya upload file
?>
<table>
<tr>
<td>File Gambar</td>
<td><?php echo form_upload('userfile');?></td>
</tr>
<tr>
<td></td><td><?php echo form_submit('submit','Kirim');?></td>
</tr>
</table>
<?php echo form_close(); ?>
Satu hal yang harus diingat, karena di controller tadi hanya ditulis do_upload() tanpa isi parameter
maka nama form_upload() harus "userfile". Kalau selain "userfile" maka ketika do_upload() harus
diisi parameter nama form_upload() nya
Pentutupan
Sekian diktat mengenai CodeIgniter. Jika ingin melihat lebih detail apa saja yang dapat dipakai di
CodeIgniter silhakan lihat dibagian User Guide CodeIgniter karena Guide ini sudah sangat lengkap
(bahkan dipuji sebagai salah satu framework PHP yang paling bagus dokumentasinya).