Beruflich Dokumente
Kultur Dokumente
Belajar CodeIgniter tidaklah terlalu sulit. Bagi Anda yang sudah menguasai PHP
dasar, saya kira Anda dapat menguasai CI dengan cepat. Saya sendiri pun (yang
hanya autodidak) dapat mempelajarinya dengan lumayan cepat tanpa hambatan yang
berarti. Mengapa? Berawal dari User Guide-nya CI yang sangat jelas, hingga
community-nya yang sangat responsible membuat saya cepat dalam mempelajarinya.
Saat ini, saya lumayan lancar dalam membuat aplikasi dengan CI, meskipun tidak
terlalu canggih.
Sebelumnya, saya tekankan bahwa disini saya asumsikan Anda sudah menguasai
dasar PHP, terutama konsep class. Mengapa class? Karena CI pada dasarnya adalah
berorientasi objek, jadi, kita nantinya akan sering membuat class-class PHP dalam
prosesnya. Jika Anda merasa belum menguasainya, silakan baca buku atau cari
referensi di internet.
Kita akan mulai mini tutorial ini dari pembahasan Controller dan View. Dua
komponen ini adalah minimal kita buat ketika membuat aplikasi dengan CI.
Controller merupakan kumpulan function yang terangkum dalam suatu class.
Bagaimana dengan View? View adalah file yang umumnya berisi HTML dan
(sedikit) PHP script yang nantinya akan ditampilkan di browser. Secara mudah,
prosesnya adalah Controller melakukan Query ke database, kemudian dia juga mem-
parsing-kan data hasil query tersebut ke View. Nah, di view, kita looping data
tersebut untuk ditampilkan.
Controller di atas bernama Mycontroller (huruf pertama harus kapital) dan disimpan
dalam folder system/application/controllers/ dengan nama mycontroller.php (huruf
pertama tidak kapital). Disini yang perlu kita ingat bahwa nama controller menjadi
nama file controller tersebut.
Perhatikan, Mycontroller memiliki function index() dan other_function(). Dalam
sistem URL CI (default), controller akan menjadi segmen pertama dari url kita, dan
dengan asumsi root adalah nama root folder anda di webserver. Perlu diingat bahwa
khusus function index (yang selalu ada dalam setiap controller) tidak perlu dituliskan
(optional). Untuk fungsi kedua, kita tulis dalam url :
Kita telah membahas Controller di episode lalu. Sekarang, kita akan membahas
komponen kedua yang tak kalah penting, yakni view. View tersimpan dalam folder
application/views/. Agar lebih rapi, kita dapat membuat subfolder di dalamnya.
Biasanya saya membuat folder-folder sebanyak dan sesuai dengan controller, jadi
lebih mudah dalam pengeditan di kemudian hari.
Untuk meload/menampilkan file view, kita cukup membuat sebuah controller dan
menuliskan dalam salah satu fungsinya :
$this->load->view('namaViewTanpaEkstensiPHP');
// jika file view ada langsung pada folder application/views/
// atau
$this->load->view('namaFolder/namaViewTanpaEkstensiPHP');
// jika file view berada dalam folder application/views/namaFolder/
Selanjutnya, jika kita arahkan browser ke :
Kali ini kita akan membahas tentang model. Sejatinya, model adalah file PHP yang
dirancang khusus untuk mengakses database. Jadi, ketika kita bekerja dengan
database (insert, update, delete, akses data, dsb), sebaiknya kita memanfaatkan
model dalam prosesnya. Mungkin hal ini tidaklah mutlak diharuskan, tetapi alangkah
lebih baiknya dilakukan. Mengapa? Hal ini akan memudahkan kita dalam proses
pembuatan aplikasi (mempercepat), karena semua akses ke database diatur dalam
satu kelompok file yang jelas, tidak tersebar. Jadi, ketika ada kesalahan mudah
dalam penanganannya.
Model dibuat untuk mempermudah akses ke tabel database. Oleh karenanya, agar
memudahkan kita dalam bekerja, sebaiknya pembuatan file model sesuai dengan
kelompok aksesnya. Ada dua pilihan disini, yaitu :
1. Kelompok berdasarkan tabel. Jadi, setiap tabel memiliki satu file model yang
khusus untuk operasi di tabel tersebut.
2. Kelompok berdasarkan jenis/topik. Misalnya anda mengelola sistem
pegawai, mungkin model yang ada adalah sistem_gaji_model.php,
sistem_kenaikan_pangkat.php, dsb, yang mana model tersebut mengakses
lebih dari satu tabel, tapi mengarah ke topik yang sama.
database.php (system/application/config/)
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root"; //ganti dengan username db anda
$db['default']['password'] = ""; //ganti dengan password db anda
$db['default']['database'] = "namaDb"; // ganti dengan nama database yang and
a gunakan untuk web anda (harus sudah ada, buat kosongan dulu)
autoload.php (system/application/config/)
$autoload['helper'] = array('url'); //diperlukan untuk fungsi base_url()
route.php (system/application/config/)
$route['default_controller'] = "web"; //controller default (akan kita buat nanti)
Persiapan Template
Hal berikutnya yang perlu kita siapkan adalah template (desain web). Anda dapat
membuat template sendiri atau mencari free template di internet (contoh :
styleshout.com). Setelah mendapatkan yang cocok, definisikan/tentukan pembagian
area di template Anda (biasanya file utama bernama index.html) . Saya contohkan
disini adalah header, content, dan footer.
Variabel title dan content akan diparsingkan ke view main.php. Pada main.php,
terdapat load view tiga kali, dimana header berisi variabel title, dan content berisi
variabel content. Hmm...sampai disini dulu, oke? Anda dapat tes web anda dengan
address : http://localhost/namaWeb.
Contoh, kita punya file css bernama style.css dan style2.css. Untuk
menggunakannya, kita buat satu file css yang lain, misal screen.css (semuanya
disimpan dalam folder stylesheet.
Nah, pada file header.php yang kita buat pada tutorial #1, kita tambahkan di bagian
dalam <head> ... </head> :
Jika kita ingin menggunakan tag background di css, gunakan seperti berikut :
Pada tutorial yang sebelumnya, kita sudah membahas tampilan secara dasar.
Sekarang kita akan meluncur ke section utama, yakni permainan database. Pada
Tabel di atas masih sangat sederhana, Anda dapat menambahkan kolom jika Anda
menginginkannya. Nah, ini dia modelnya...
Class Postmodel extends Model
{
function Postmodel()
{
parent::Model();
}
function getRecentPost()
{
$this->db->select('*');
$this->db->from('posting p');
$this->db->where('posting_aktif',1); // hanya posting yang aktif yang ditampil
kan
$this->db->order_by('p.posting_id','desc');
$this->db->limit(5); // diambil lima entri terbaru
return $this->db->get();
}
}
Ok. Selanjutnya, kita buat modifikasi controller yang dulu kita buat, pada seri
tutorial website #1.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Web extends Controller {
function Web()
{
parent::Controller();
$this->load->model('postmodel');
$this->load->helper('text');
}
function index()
{
$data['title']="Welcome to My Website"; // data untuk variabel $title
Selanjutnya, modifikasi juga view 'content.php', karena view yang kita load
(main.php) memanggil file content.php untuk jadi tampilan content.
<!-- content starts here -->
<div id='content'>
<?php foreach($content->result() as $row):?>
<h3><?=$row->posting_judul?></h3>
<p class="post-info">
Oleh Admin | <?=$row->posting_hits?> hits
</p>
<p>
<?=word_limiter($row->posting_isi,30)?> </p> <!-- batasi tampilan hanya 30 k
ata -->
<p class="postmeta">
<span class="date"><?=date('d F Y',$row->posting_tanggal)?></span>
</p>
<?php endforeach?>
</div>
<!-- content ends here -->
Yups, kita selesai. Silakan dicoba. Kita akan buat yang lebih kompleks di tulisan
mendatang (kategori, komentar, arsip, dsb). {to be continued }
Nb. Model memerlukan koneksi ke database. Di CI, ada beberapa cara untuk dapat
terkoneksi ke database, dari yang otomatis sampai manual. Saran saya, lakukan
dengan cara otomatis, karena kita akan sering menggunakan database dalam script
kita. Untuk itu, pada autoload.php, tambahkan 'database' dalam array
$autoload['libraries'].
Pada Class di atas kita definisikan variabel-variabel yang perlu, dan ...class css.
Untuk CSS nya sebagai berikut :
/* paging */
.pag_link{
background:#f8f8f8;
border:#EBEBEB 1px solid;
padding:3px 8px;
margin-left:3px;
margin-right:3px;
color:#000000;
}
.pag_link_cur{
background:#AAAAAA;
border:#f8f8f8 1px solid;
padding:3px 8px;
margin-right:3px;
margin-left:3px;
color:#000000;
}
.paging{
margin-left:7px;
padding-bottom:10px;
padding-top:10px;
margin-bottom:10px;
text-align:left;
}
.paging a{
Berikutnya, kita buat library untuk memudahkan pengelolaan user, seperti login dan
restrict page.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Auth {
function Auth()
{
$this->CI =& get_instance();
}
function process_login($login = NULL)
{
// cek apakah array login ada
// array login dikirim dari form login berisi username dan password
if(!isset($login))
return FALSE;
// value dalam array hanya boleh ada 2
// tidak lebih dan tidak kurang
if(count($login) != 2)
return FALSE;
// ambil data dari array
$username = $login['username'];
$password = $login['password'];
// cari dalam database
$this->CI->db->where('user_username', $username);
$this->CI->db->where("user_password=PASSWORD('$password')");
$query = $this->CI->db->get('user');
if ($query->num_rows() == 1)
{
foreach ($query->result() as $row)
{
$user_id = $row->user_id;
$username = $row->user_username;
$level = $row->level_id;
$nama = $row->user_nama;
}
$newdata = array(
'user_id' => $user_id,
'username' => $username,
'level' => $level,
'nama' => $nama
);
Selanjutnya, untuk setiap halaman yang akan dikontrol, kita cek dua kali, pertama
cek apakah si user sudah login atau belum dan yang kedua cek apakah dia punya hak
akses untuk melihat/membuka halaman tersebut. Pengecekan ini dilakukan di
constructor dari controller (sehingga ber-efek ke semua fungsi dalam controller
tersebut) menggunakan fungsi restrict() dan cek() yang sudah ada di paket library
auth yang baru saja kita buat.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
Class Postingberita extends Controller
{
function Postingberita()
{
parent::Controller();
// cek apa dia sudah login
$this->auth->restrict();
// cek apa dia punya hak untuk mengakses menu posting berita (menu_id = 2)
$this->simplival->cek(2);
}
}