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.
}
}
?>
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;
}
?>
Menangani 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);
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();
tetapi sebetulnya juga bisa langsung mengetik tag html
</form>
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” />
Output Class sudah diinisialisasi secara otomatis, jadi tidak usah di load() lagi
Satu hal yang perlu diingat adalah kita men-direct URI, jadi JANGAN tulis link
lengkap. Kalau ingin mendapat kontrol lebih, lebih baik menggunakan yang versi
Output Class
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.
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_tem
plate_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');
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()
{
}
}
Di view kita tinggal menampilkan saja
<?php
foreach($produk->result() as $row){
echo $row->idproduk."</td>";
echo $row->namaproduk;
echo $row->ukuran;
echo "<br/>";
}
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).