Minggu, 29 Juli 2012

Aplikasi CRUD

Aplikasi CRUD (Create, Read/Retrieve, Update, dan Delete) adalah aplikasi yang digunakan untuk melakukan maintenance data, yang terdiri atas modul untuk melakukan penambahan data, pembacaan data, perbaikan, dan penghapusan data.

Orientasi dari suatu aplikasi CRUD adalah manipulasi pada satu tabel, secara utuh atau sebagian kolomnya saja.

Suatu aplikasi CRUD yang lengkap akan menampilkan data dari suatu tabel dalam bentuk tabel atau grid, dengan menu yang terdiri atas tambah, ubah, dan hapus; yang dilengkapi dengan fitur untuk melakukan pemfilteran data. Data disajikan secara utuh atau pun dengan menggunakan paging.

Data harus disajikan dengan menggunakan paging, jika jumlah baris data sudah sangat banyak, sudah melewati ukuran layar. Paging digunakan untuk membuat agar pengguna tidak perlu melakukan scroll layar dan juga agar waktu penampilan data dari server tidak terlalu lama.

CodeIgniter pada versi awal menyediakan fasilitas untuk membuat aplikasi CRUD yang disebut dengan scafolding, tetapi sejak versi 1.7 fitur ini dihapus.

Tetapi pengembang aplikasi dengan dengan menggunakan framework CodeIgniter tidak perlu khawatir, karena banyak framework yang dikembangkan dengan menggunakan CodeIgniter atau pun librari (plugin) yang dapat digunakan.

Beberapa contoh aplikasi CRUD yang bisa digunakan adalah framework iotataubeta, atau beberapa yang ditampilkan berikut:




Senin, 23 Juli 2012

Hasil Query Data

Method query() atau pun ActiveRecord akan memberikan hasil query yang sama, yaitu berupa objek record. 


Objek record ini dapat diproses dengan menggunakan foreach(), atau dikonversi terlebih dahulu menjadi array record, sehingga bisa diproses dengan menggunakan for() yang menggunakan array.


Sebelum melakukan pemrosesan data hasil query, maka pengembang disarankan untuk melakukan pemeriksaan terlebih dahulu dengan menggunakan method num_rows(). Pemeriksaan ini digunakan untuk memastikan apakah ada data hasil query atau tidak. Jika tidak ada maka kita bisa menampilkan pesan bahwa tidak ada data yang diquery, sebagai ganti prosesnya.


Kita dapat menggunakan fungsi result() kepada objek database, $this->db->result(), yang akan menghasilkan sebuah objek record atau array kosong.


$row=$query->result();


akan menghasilkan sebuah objek record, yang kemudian isinya ditampilkan dengan cara:


echo $row->namakolom1;
..
echo $row->namakolomn;


Proses konversi menjadi array dapat dilakukan dengan menggunakan fungsi result_array();


$row=$query->result_array();


Hasilnya akan menghasilkan sebuah array record, yang kemudian isinya ditampilkan dengan perintah berikut:


echo $row["namakolom1"];
..
echo $row["namakolomn"];


Untuk memroses keseluruhan data objek hasil array dilakukan dengan cara:


   foreach ($query->result() as $row)
   {
      echo $row->namakolom1;
      ..
      echo $row->namakolomn;
   }



Jika kita melakukan pemeriksaan terlebih dahulu, maka berikut adalah kodenya:


$query = $this->db->query("select * namatabelatauview");
if ($query->num_rows() > 0)
{
   foreach ($query->result() as $row)
   {
      echo $row->namakolom1;
      ..
      echo $row->namakolom2;
   }
}  else {

   echo "Tidak ada data hasil query!";
}

Minggu, 22 Juli 2012

Method Query Dengan CI

CI memberikan kebebasan kepada pengembang aplikasi yang menggunakan frameworknya. Pengembang yang masih senang menggunakan perintah SQL untuk melakukan query, CI menyediakan fungsi atau method query(), dengan parameter berupa string SQL.

Pengembang aplikasi harus menyiapkan perintah SQL terlebih dahulu, baru kemudian dimasukkan sebagai parameter dari method query().


<?php
..
$sqlstr="select * from namatabel ";
$qresult=$this->db->query($sqlstr);
var_dump($qresult);
..
?>

Perintah SQL yang dijadikan parameter untuk method query() dapat berupa perintah untuk membaca data dari database (select), untuk menambah data (insert), untuk memperbaiki data (update), atau untuk melakukan penghapusan (delete).


Hasil dari method query() dan ActiveRecord sama saja, berupa objek hasil query, apabila perintah SQL adalah select.

Selain perintah select, maka hasilnya adalah jumlah record yang terkena proses. Method untuk mendapatkan jumlah record yang terkena proses adalah affected_rows():


$nr=$this->db->affected_rows()

Kita dapat menggunakan nilai dari jumlah record yang terkena proses ini, untuk mengetahui apakah proses insert, update, atau delete berhasil atau tidaknya.


Jumat, 20 Juli 2012

Konfigurasi Database Dalam CI

Salah satu keunggulan dari framework PHP CI adalah dukungan framework untuk pembuatan aplikasi database. CI menyediakan dukungan kepada hampir database besar yang populer, dari MySQL, PostgreSQL, MS SQL Server, dan Oracle.

Pengembang bisa langsung berkonsentrasi pada pengembangan program. Mengapa? Karena CI telah membuatkan librari yang membungkus semua fungsi database yang ada dalam PHP menjadi seragam.

Konfigurasi
Data tentang database yang akan digunakan oleh program, cukup didefinisikan di dalam file konfigurasi database.php yang ada di dalam direktori application/config.

Berikut adalah contoh dari isi konfigurasi database.php

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
$db['default']['swap_pre'] = "";
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

Pengembang cukup mengubah isi dari item hostname, username, password, database, dan dbdriver.
Jika kita menggunakan MySQL, maka konfigurasi di atas, cukup diubah hostname, username, password, dan databasenya saja.

Autoload
Agar koneksi database dibuka secara otomatis, maka berikutnya pengembang cukup mendefinisikan di dalam file konfigurasi autoload, pada item libraries dimasukkan database sebagai librari class yang harus diload secara otomatis.

Kamis, 19 Juli 2012

ActiveRecord Dasar: Metode Query Database Dalam CI

SQL merupakan bahasa untuk melakukan query data yang berawal dari database yang menggunakan sistem manajemen database relasional.

CI menyediakan metode query data yang memudahkan pemrogram yang belum mahir untuk menyusun perintah SQL untuk dapat dengan mudah melakukan query data, dengan metode yang disebut dengan ActiveRecord. Istilah ActiveRecord ini populer di lingkungan Ruby On Rail.

ActiveRecord memungkinkan pemrogram untuk melakukan query data tanpa harus membuat perintah SQL, tetapi cukup menyebutkan nama tabel atau viewnya saja.

$rs=$this->db->get('namatabel');

Perintah get() sama dengan kita memberikan perintah SQL:

select * from namatabel

Jika kita ingin mengambil sebagian kolom dari suatu tabel, maka kita bisa menggunakan fungsi select()

$this->db->select("namakolom1, namakolom2");

$rs=$this->db->get('namatabel');


Sama dengan perintah SQL:

select namakolom1, namakolom2 from namatabel

Chaining
Kita bisa membuat perintah ActiveRecord dengan menggunakan satu baris:



$this->db->select("namakolom1, namakolom2")->get('namatabel');


Perintah ActiveRecord bisa disatukan, sehingga pengembang bisa menyederhanakan perintah.










Rabu, 18 Juli 2012

Konfigurasi Autoload

CI menganjurkan untuk melakukan pemuatan (load) suatu helper atau librari class dilakukan pada saat akan digunakan. Cara ini dilakukan agar tidak terlalu banyak baris program yang harus dimuat dan diinterpretasi oleh PHP di server.

Dalam kondisi tertentu beberapa helper dan librari class banyak digunakan atau hampir selalu digunakan dalam suatu program yang dibuat; seperti helper HTML, URL, dan FORM hampir selalu digunakan oleh program untuk menghasilkan suatu tampilan entri,

Jika kita dapat mengidentifikasi bahwa heper dan librari ini ada hampir pada setiap controller dan fungsi-fungsinya, model, atau viewnya, maka kita bisa membuat agar pemuatan dilakukan secara otomatis oleh CodeIgniter, yang dilakukan dengan menspesifikasikannya dalam file konfigurasi autoload.php.

File autoload.php berada di bawah direktori application/config.

Dalam file autoload.php ini, kita mendefinisikan pemuatan secara otomatis semua helper yang paling sering digunakan, librari class mana yang sering digunakan, dan bisa jadi file model mana saja yang digunakan.


Berikut adalah item-item yang dapat dimuat secara otomatis:
  • Semua librari class yang ada di bawah folder "libraries"
  • Semua file helper yang ada di bawah folder "helpers"
  • File config tambahan yang ditemukan di bawah folder "config"
  • File-file bahasa yang ada di bawah folder "system/language"
  • Model-model yang ditemukan dalam folder "models"


Dengan didefinisikan di dalam file autoload.php ini, maka pemrogram tidak perlu melakukan pemuatan lagi di dalam setiap controller, model, atau view yang akan menggunakannya.









Selasa, 17 Juli 2012

Membuat Form Dengan Teknik MVC

Di dalam aplikasi dengan menggunakan MVC, maka kita dianjurkan untuk dapat memilah bagian-bagian dari program yang dibuat menjadi setidaknya 3 file, controller, view, dan model. Jangan sampai semua kode hanya ada di dalam controller, jika terjadi demikian, maka apa bedanya program yang dihasilkan dengan framework dengan yang tidak?

Kita akan membuat secara bertahap, memilah contoh pembuatan form pada tulisan sebelumnya dengan menggunakan model dan view.

Contoh membuat form komentar yang menggunakan hanya satu file controller saja, ditunjukkan seperti berikut:


<?php
class C_formkomentar extends CI_Controller{
function __construct(){
parent::__construct();
$this->load->helper("form");
}
function index(){
$aksi="simpankomentar";
$namapengunjung=array(
 "name"=>"namapengunjung"
 ,"size"=>"50"
 ,"maxlength"=>"100"
);
$email=array(
 "name"=>"email"
 ,"size"=>"50"
 ,"maxlength"=>"100"
);
$komentar=array(
 "name"=>"komentar"
 ,"rows"=>"5"
 ,"cols"=>"40"
);
echo form_open($aksi);
echo form_label("Nama : ").form_input($namapengunjung);
echo br();
echo form_label("Email : ").form_input($email);
echo br();
echo form_label("Komentar : ").form_textarea($komentar);
echo br();
echo form_close();
}
}
?>


Program untuk menampilkan form di atas, menggunakan satu file saja, yaitu controller. Suatu controller seharusnya tidak panjang programnya seperti di atas, karena kita belum menggunakan teknik pemrograman dengan MVC.

Kita harus membuat sebuah file model untuk mendefinisikan elemen form dan sebuah view untuk menampilkannya, menjadi seperti berikut:

Isi file model m_formkomentar.php:


<?php
class M_formkomentar extends CI_Model{
function formelemen(){
$aksi="simpankomentar";
$namapengunjung=array(
 "name"=>"namapengunjung"
 ,"size"=>"50"
 ,"maxlength"=>"100"
);
$email=array(
 "name"=>"email"
 ,"size"=>"50"
 ,"maxlength"=>"100"
);
$komentar=array(
 "name"=>"komentar"
 ,"rows"=>"5"
 ,"cols"=>"40"
);
return array(
"aksi"=>$aksi
,"namapengunjung"=>$namapengunjung
,"email"=>$email
,"komentar"=>$komentar
)
}
}
?>


Isi file view v_formkomentar.php:


<?php
echo form_open($aksi);
echo form_label("Nama : ").form_input($namapengunjung);
echo br();
echo form_label("Email : ").form_input($email);
echo br();
echo form_label("Komentar : ").form_textarea($komentar);
echo br();
echo form_close();
?>


Isi file view v_formkomentar ini hanya merupakan penyederhanaan contoh, kita harus memberikan kode HTML tambahan agar dapat ditampilkan dengan lebih baik.

Setelah kita membuat model dan viewnya, maka kita harus memperbaiki file controllernya menjadi seperti berikut:


Isi file controller c_formkomentar.php:


<?php
class C_formkomentar extends CI_Controller{
function __construct(){
parent::__construct();
$this->load->helper();
}
function index(){
$this->load->model("m_formkomentar");
$data=$this->m_formkomentar->formelemen();
$this->load->view("v_formkomentar",$data);
}
}
?>


Program controller yang dibuat menjadi lebih sederhana dan ringkas. Dampaknya adalah kita bisa mendefinisikan elemen form tambahan di dalam file model, tanpa perlu khawatir mengubah logika program, dan mengubah tampilannya dengan mengubah file view.

Senin, 16 Juli 2012

Menampilkan Pesan Hasil Validasi Jika Ada Error

Proses validasi dengan menggunakan librari class form_validation, dengan menjalankan fungsi (method) run(), akan menghasilkan true atau false. Berdasarkan nilai ini kita dapat mengetahui apakah proses validasi telah berhasil atau tidak.

Tetapi tentu saja, kita tidak ingin sekedar tahu, apakah validasi berhasil atau tidak, tetapi juga ingin tahu input mana saja yang tidak sesuai dengan rule yang ditetapkan pada saat validasi. Hasil dari validasi yang dilakukan dengan menggunakan librari class form_validation dari CI, dapat diakses dengan menggunakan fungsi validation_errors().

<?php echo validation_errors(); ?>


Harus diletakkan pada awal dari form untuk mendapatkan input.
Jika pertama kali form ditampilkan, maka hasil dari validation_errors() adalah string kosong.


Jika form dipanggil setelah proses validasi, maka hasilnya bisa berupa pesan kesalahan, apabila ada nilai masukan yang tidak sesuai dengan rule validasinya.

CI menyediakan juga fungsi untuk mendapatkan hasil validasi untuk setiap elemen yang divalidasi, dengan menggunakan fungsi form_error('namaelemen');

Kita dapat memberikan perintah berikut:


<?php echo form_error('namaelemen'); ?>


Pada baris sebelum input elemen tersebut atau sesudahnya.


Minggu, 15 Juli 2012

Validasi Data Dengan CI


Validasi data dengan menggunakan CI dapat dilakukan dengan menggunakan librari class validation.

Pemuatan librari harus dilakukan terlebih dahulu, agar validasi dapat dilakukan. Berikut adalah pemuatan librari untuk validasi:

$this->load->library('form_validation');

Validasi yang disediakan oleh CI:

  • required, memastikan bahwa input diisi
  • confirmation
  • email, memastikan alamat email dimasukkan dengan benar
  • jumlah digit data, minimum, maksimum, sama dengan n digit suatu input
  • jenis data input: karakter, numerik, integer, desimal
  • valid ip
Selain validasi yang disediakan oleh CI, pengembang aplikasi dapat menggunakan fungsi-fungsi dari PHP atau pun fungsi yang dibuat oleh pemrogram.

Setelah pemuatan dilakukan, maka kita harus mendefinisikan rule untuk validasi dengan menggunakan fungsi set_rules().

Cara mendefinisikan rule:

$this->form_validation->set_rules('namaelemeninput','label/promptelemeninput','rulevalidasi');

Berikut adalah kita ingin memvalidasi input namapegawai.

Form input:

<input type='text' name='namapegawai' value=''>

Controller untuk melakukan validasi:

$this->load->library('form_validation');
$this->form_validation->set_rules('namapegawai','Nama pegawai','required');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}

Fungsi run() dari form_validation akan melakukan proses pemvalidasian untuk semua field atau input yang didefinisikan dengan menggunakan set_rules().





Sabtu, 14 Juli 2012

Dasar Membuat View Template CI

Template view adalah view yang digunakan sebagai template untuk menampilkan dokumen web.

Template perlu dan umum digunakan oleh pengembang aplikasi web untuk menyeragamkan tampilan aplikasi dari setiap halaman, yang berbeda hanya pada bagian isinya.

Salah satu keunggulan dari menggunakan aplikasi untuk membuat suatu situs web dengan menggunakan pemrograman, bukan dengan membuat setiap halaman statik, adalah penggunaan template. Secara umum maka setiap halaman yang menggunakan template akan memiliki struktur yang sama; yang berbeda hanya isi dari halaman web tersebut.

Seperti telah diketahui, semua data yang akan ditampilkan di dalam halaman web dari suatu aplikasi web akan dimasukkan ke dalam variabel array asosiatif terlebih dahulu. Variabel asosiatif ini kemudian dilewatkan kepada view untuk ditampilkan. Setiap key dari array asosiatif akan menjadi variabel di dalam view.

Untuk membuat view template, maka kita dapat melakukan berbagai cara. Salah satu cara yang umum digunakan adalah dengan membagi satu halaman view menjadi beberapa view, dengan sebuah view rangka.

Perhatikan view berikut:



<html>
<head>
<title>Judul Dokumen</title>
</head>
<body>
<div>Header</div>
<div>Isi dari halaman web</div>
<div>Footer</div>
</body>
</html>



View di atas adalah view dengan struktur dan isi yang sederhana, sekedar menunjukkan bahwa kita bisa memiliki sebuah halaman web yang dibagi menjadi tiga bagian, yaitu header, isi, dan footer.

Dari view di atas, maka kita bisa menjadikan view tersebut menjadi view template, dengan cara memisahkan file view di atas menjadi beberapa bagian: v_main.php, v_header.php, dan v_footer.

File v_main.php
File v_main.php merupakan file utama dari view template yang akan dibuat, di dalamnya dilakukan proses menampilkan data dan pemuatan view v_header dan v_footer. 

Nama file v_main.php:
<html>
<head>
<title><?=$apptitle;?></title>
</head>
<body>
<?$this->load->view("v_header");?>
<div>
<?=$appcontent;?>
</div>
<?$this->load->view("v_footer");?>
</body>
</html>
File v_main.php merupakan view template yang sederhana, yang akan menampilkan isi dari dua variabel, yaitu $apptitle dan $appcontent. Isi dari $appcontent bisa berupa string dokumen HTML.

File v_header.php
File v_header.php adalah file yang berisi header dari halaman web.

Nama file v_header.php:
<div>Header</div>

File v_footer.php
File v_footer.php berisi informasi yang menjadi footer dari halaman web.

Nama file v_footer.php:
<div>Footer</div>

File header dan footer dipisahkan, dengan isi yang tetap. Dengan cara ini, maka header dan footer dari halaman web akan ditampilkan secara tetap, tidak ada perubahan. Hanya bagian tengah atau isi saja yang berbeda-beda, sesuai dengan hasil pemrosesan yang dilakukan oleh controller.

Pada setiap fungsi dalam suatu controller yang akan menampilkan hasil proses atau menampilkan halaman web, maka yang dilakukan hanya mendefinisikan key array asosiatif yang akan dilewatkan kepada view; dengan nama view adalah v_main.

<?php
class MyController{
..
function first(){
$data=array();
$data["apptitle"]="First Function";
$data["appcontent"]="
<div>
Ini isi dokumen dengan dari fungsi #1
Ini isi dokumen dengan dari fungsi #1
Ini isi dokumen dengan dari fungsi #1
Ini isi dokumen dengan dari fungsi #1
</div>
";
   $this->load->view("v_main",$data);
}
..
function hello(){
$data=array();
$data["apptitle"]="Hello function";
$data["appcontent"]="Hello World!";
   $this->load->view("v_main",$data);
}
}
?>

Contoh di atas, hanyalah contoh sederhana untuk membuat suatu tampilan halaman atau aplikasi web yang seragam dengan menggunakan template. Template view yang dibuat bisa dibuat menjadi lebih kompleks, sesuai dengan rancangan dari halaman dan aplikasi webnya.

Kamis, 12 Juli 2012

Helper HTML: doc_type()


Salah satu luaran yang harus dihasilkan aplikasi yang dikembangkan dengan menggunakan PHP atau framework CodeIgniter adalah dokumen HTML.

Suatu dokumen dinyatakan sebagai dokumen HTML yang benar adalah apabila isi dari dokumen memiliki spesikasi dokumen HTML yang ditandai dengan adanya tag-tag HTML, diawali dengan deklarasi jenis dokumen HTML, kemudian diikuti dengan tag <html>, dan diakhiri dengan </html>. Di antara tag <html> dan </html>, didefinisikan tag dengan struktur yang benar.

Kita dapat memvalidasi apakah dokumen web yang kita susun, secara struktur sudah valid atau belum, dengan menaruh link berikut http://validator.w3.org/check?uri=referer dalam halaman web. Jika link diklik, maka halaman web tersebut akan divalidasi, apakah halaman web tersebut valid sebagai dokumen HTML atau tidak, sesuai dengan standar dokumen HTML atau belum. Jika link validator pada halaman ini diklik, maka akan ditampilkan banyak pesan kesalahan dan peringatan. Karena hasil dari CMS dari blogspot yang digunakan penulis memang belum valid secara dokumen, bisa dikatakan lebih mengutamakan tampilan dan fungsionalitas penampilan.

CI menyediakan fungsi untuk mendeklarasikan halaman web yang dihasilkan menjadi dokumen web dengan standar HTML yang diinginkan, dengan menggunakan fungsi doc_type().

Sintaks:
echo doc_type(opsi);
opsi adalah parameter dari fungsi doc_type() yang mendefinisikan jenis dokumen HTML versi berapa yang diinginkan.
Nilai opsi yang bisa dijadikan parameter adalah sebagai berikut:

Doctype opsi Hasil
XHTML 1.1 doctype('xhtml11') <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
XHTML 1.0 Strict doctype('xhtml1-strict') <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XHTML 1.0 Transitional doctype('xhtml1-trans') <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XHTML 1.0 Frameset doctype('xhtml1-frame') <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
HTML 5 doctype('html5') <!DOCTYPE html>
HTML 4 Strict doctype('html4-strict') <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
HTML 4 Transitional doctype('html4-trans') <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
HTML 4 Frameset doctype('html4-frame') <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">






Rabu, 11 Juli 2012

Konfigurasi Framework CI

Framework CI memiliki konfigurasi aplikasi yang disimpan di bawah direktori application/config.

Beberapa file dasar konfigurasi yang penting, yang perlu untuk untuk diubah nilainya adalah:
  • config.php
  • route.php
  • autoload.php
  • database.php
File config.php
File ini digunakan untuk mendefinisikan protokol dan nama domain atau alamat IP dari aplikasi web. Nama domain dari aplikasi web perlu diubah, apabila kita ingin menambahkan batasan siapa saja yang bisa menggunakan aplikasi ini. Aplikasi yang dikembangkan bisa dipasang di mana saja. 

Di dalam file config.php ini juga mendefinisikan apakah kita akan mengaktifkan session aplikasi atau tidak. Jika akan diaktifkan, apakah session akan disimpan ke dalam database atau tidak. Setelah itu kita harus mengisikan key untuk session.

File route.php
File route.php digunakan untuk mendefinisikan atau mengubah nama controller default dari aplikasi. Default controller dari aplikasi adalah welcome. 

File autoload.php
File autoload digunakan untuk mendefinisikan file konfigurasi aplikasi tambahan, helper, librari, dan model aplikasi yang perlu secara otomatis dimuat pada saat aplikasi dijalankan.

File database.php
Konfigurasi tentang database yang akan digunakan oleh aplikasi didefinisikan pada file database.php ini. CI mendefinisikan database apa saja yang akan digunakan oleh aplikasi, secara terpusat dalam file ini.

Pengembang masih dapat melakukan pendefinisian di dalam controller atau model yang dibuat sendiri, tetapi sangat tidak disarankan, karena akan menyebabkan konfigurasi menjadi tersebar. Jika dilakukan secara tersebar, maka jika ada perubahan, pemrogram harus melakukan perubahan pada banyak file dan harus diperiksa satu per satu.

Selasa, 10 Juli 2012

Dasar Pagination Dengan CI

Pagination adalah istilah yang digunakan untuk menampilkan data dengan cara sebagian-sebagian, dengan menyajikan halaman demi halaman. Dalam aplikasi web, maka menampilkan sebagian data dilakukan menampilkan dalam satu halaman browser web; pagination mengacu pada penyajian data dalam halaman web.

Jika kita memiliki data yang banyak, maka data disajikan tidak langsung seluruhnya, tetapi sebagian-sebagian saja. Mengapa? Karena jika seluruhnya langsung ditampilkan, maka bisa jadi data hanya sebagian yang dapat ditampilkan oleh browser web, karena terputusnya hubungan dengan server.

Setiap server web memiliki waktu tanggap (response time) yang berbeda-beda untuk melayani suatu request dari penggunanya. Dengan keterbatasan waktu tanggap ini, maka jika server sedang sibuk, banyak melayani permintaan dari pengunjung, maka data akan dikirimkan sebagian-sebagian; pada saat waktu tanggap mencapai batas, maka koneksi untuk menanggapi permintaan akan diputus secara otomatis. Akibatnya? Hanya sebagian data saja yang akan terkirim.

Belum lagi jika koneksi sedang lambat, karena server web akan memberikan tanggapan atas permintaan akan dilakukan secara sebagian-sebagian. Setiap bagian setelah diterima akan dikonfirmasikan kepada server terlebih dahulu, sebelum kemudian server memberikan data berikutnya. Jika koneksi lambat, maka kita akan mendapatkan waktu yang tidak mencukupi, karena waktu tanggap yang disetel untuk server tersebut.

Untuk itu, untuk menjamin data dapat disajikan secara sebagian-sebagian, maka kita akan melakukan pembatasan akan data yang dikirimkan. Untuk mendapatkan data berikutnya, kita harus menyediakan link untuk menampilkannya. Link-link ini dapat disajikan dengan menggunakan nomor halaman. Nomor halaman akan disajikan sesuai dengan kelipatan dari jumlah data yang ditampilkan pada halaman tersebut.

CodeIgniter menyediakan librari class pagination, yang akan menampilkan link berupa nomor halaman untuk menampilkan data yang belum atau tidak ditampilkan.

Librari class ini akan secara otomatis menampilkan link untuk data berikutnya atau sebelumnya, dengan nomor halaman yang sedang ditampilkan dibedakan, dengan tidak dapat diklik; seperti ditunjukkan gambar berikut:

Contoh di atas menunjukkan pagination.

Kita dapat membuatnya dengan mudah, dengan melakukan pemuatan librari class terlebih dahulu, kemudian memasukkan parameter untuk menghitung jumlah halaman dan menampilkan link untuk menuju nomor halaman data yang belum ditampilkan.

Berikut adalah contoh untuk membuat link pagination seperti ditunjukkan di atas:

<?php
$this->load->library('pagination');

$config['base_url'] =site_url( 'controller/fungsi');
$config['total_rows'] = 200;
$config['per_page'] = 20; 

$this->pagination->initialize($config); 

echo $this->pagination->create_links();


?>

Setelah pemuatan librari class pagination, maka berikutnya kita mendefinisikan controller yang akan menampilkan data. Item total_rows diisi dengan jumlah data total, dari data yang akan ditampilkan. Item per_page diisi dengan jumlah data dalam setiap halamannya.

Item total_rows biasanya dihasilkan dari hasil counting data dari database, dengan menggunakan fungsi aggregat SQL count() , dari suatu query yang dilakukan untuk mendapatkan data dari database.

Librari class akan melakukan perhitungan akan ada berapa halaman data, untuk menampilkan link berupa nomor halaman, yang dilakukan pada saat fungsi initialize($config) dieksekusi. Hasil berupa link nomor halaman akan ditampilkan dengan menggunakan perintah echo untuk fungsi create_links().

Pemuatan librari class pagination dilakukan di dalam fungsi dari controller, hasil link bisa disimpan dalam variabel kemudian ditampilkan di dalam view.

Senin, 09 Juli 2012

Helper Form : form_dropdown()


Helper form form_dropdown() sangat memudahkan pemrogram web untuk melakukan pengeditan data. Jika kita tidak menggunakan helper ini, maka pemrogram harus menambahkan kode tambahan untuk bisa menampilkan data combobox dengan default pilihannya; jika combobox harus dihasilkan secara dinamik.

Jika kita menggunakan HTML statik, maka mendefinisikan item pilihan tidaklah menjadi masalah, karena kita bisa menuliskan selected pada item pilihan tersebut.

Berikut adalah kode HTML statik;

<select id="kodekota" name="kodekota">
<option value="bdg">Bandung</option>
<option value="crb" selected>Cirebon</option>
<option value="jkt">Jakarta</option>
</select>


Jika kita menggunakan PHP standar, maka kita akan membuat program seperti berikut:



<?php
$akodekota=array(
"bdg"=>"Bandung"
,"crb"=>"Cirebon"
,"jkt"=>"Jakarta"
);
$dipilih="crb";
$pilihan="";
foreach($akodekota as $kodekota => $namakota){
$pilihan.="<option value='".$kodekota."' ".(($kodekota==$dipilih)?"selected":"").">";
$pilihan.=$namakota;
$pilihan.="</option>";
}
?>
<select id="" name=""><?=$pilihan;?></select>

Jika kita menggunakan CodeIgniter dan menggunakan helper form form_dropdown(), maka kita bisa dengan sangat mudah. Berikut adalah kodenya:

<?php
$akodekota=array(
"bdg"=>"Bandung"
,"crb"=>"Cirebon"
,"jkt"=>"Jakarta"
);
$dipilih="crb";
echo form_dropdown("kodekota",$akodekota,$dipilih);
?>



Sabtu, 07 Juli 2012

Helper Form: form_label()

Jika kita membuat form untuk input, maka kita akan memberikan teks atau prompt di sebelah kiri atau di atas dari elemen inputnya. Teks atau prompt ini digunakan untuk memberikan keterangan kepada pengguna aplikasi tentang data apa yang harus dimasukkan ke dalam elemen input yang disajikan tersebut.

Bentuk form entri secara umum:

Login
Nama user : |___________|
Password   : |___________|

|Login| |Cancel|


Kita bisa menggunakan elemen tabel agar tampilannya lebih rapi atau menggunakan CSS untuk mengatur letak dari elemen input.

Kita dapat menggunakan CSS untuk dapat merapikan tampilan, sehingga antara prompt dan elemen input dapat ditampilkan berdampingan seperti menggunakan tabel, atau pun berbeda baris.

Untuk menampilkan prompt untuk suatu elemen, maka prompt ditampilkan dengan menggunakan teks biasa.

Jika kita melihat pada pemrograman di lingkungan dengan antarmuka grafikal, maka kita sering disediakan fitur, jika kita klik promptnya, maka kita akan mendapatkan kursor kita pada elemen input. Fitur mengklik pada prompt atau pun nilai dari suatu pilihan itu sama dengan mengklik pada elemen inputnya; sehingga pengguna bisa lebih dimudahkan.

Elemen form HTML pun telah dilengkapi untuk memudahkan pengguna bisa mengklik prompt atau nilainya saja, tidak perlu mengklik elemen inputnya untuk bisa membuat kursor fokus pada elemen inputnya.

Elemen HTML yang digunakan untuk membuat kemudahan ini adalah elemen label, dengan tag <label> Teks </label>.

Contoh:

<label for="idelemeninput">Teks/Prompt</label>
<input type="text"  id="idelemen"  name="idelemen" value="">


Tag label jika ingin dapat berfungsi untuk memudahkan pemfokusan kepada elemen input, maka tag label selalu dipasangkan dengan elemen inputnya. Di dalam tag label kita harus menambahkan atribut for yang diisi dengan idelemen yang akan diberi fokus, jika teks atau prompt dari label diklik.


Jika kita menggunakan CodeIgniter, maka kita dapat dengan mudah untuk menyatakan label untuk suatu elemen input.


Untuk contoh di atas, maka kita dapat menyatakan dengan cara berikut:


<?php
echo form_label("Teks/Prompt","idelemen");
echo form_input("idelemen");
?>

Elemen atau tag label ini jarang digunakan oleh pemrogram aplikasi web, apalagi jika pemrogram lebih banyak menggunakan tabel untuk membuat layout dari form entrinya.

Rabu, 04 Juli 2012

Struktur Direktori CI2

Salah satu perubahan mendasar dari CodeIgniter 2 dengan versi sebelumnya adalah struktur direktori dari framework.

CI2 merestrukturisasi direktori frameworknya, sehingga pengembang aplikasi yang menggunakan framework CI ini, bisa lebih leluasa untuk mengembangkan aplikasi. CI2 memisahkan direktori yang berisi program framework dengan direktori program yang dikembangkan oleh pemrogram yang menggunakan CI.

Sebelum versi 2, direktori application yang akan berisi program-program yang dikembangkan oleh pemrogram CI disimpan di bawah direktori system, sehingga direktori system akan berisi program framework CI dan program yang dikembangkan oleh pemrogram.

Mulai versi 2, maka direktori application yang berisi program yang dikembangkan oleh pemrogram dikeluarkan dari direktori system, sejajar dengan direktori system, sehingga struktur direktori CI bawaan (default) adalah seperti berikut:

[direktoriinstalasiCI2]
- application
- system
- user_guide
index.php
Pemrogram disarankan untuk tidak mengganggu program dari framework, yang ada di dalam direktori system.

Secara teknik pemrograman, tidak ada perubahan mendasar, pemrogram tetap bisa membuat script untuk controller, model, dan view dalam direktori controllers, models, dan views di bawah direktori application.

Keuntungan dari perubahan struktur direktori ini adalah, jika kita melakukan update atau perubahan program, maka kita bisa mengupdate satu direktori saja, yaitu direktori application dan semua direktori di bawahnya.

Selain direktori bawaan, pemrogram dapat menambahkan direktori asset yang sejajar dengan direktori system dan application, untuk menyimpan file-file yang tidak berhubungan dengan HTML dan PHP; sehingga struktur direktori aplikasi web dengan CI kita menjadi seperti berikut:
[direktoriinstalasiCI2]
- application
- asset
- system
- user_guide
index.php
Nama direktori asset atau assets merupakan direktori yang secara defakto digunakan oleh banyak pemrogram PHP atau aplikasi web lainnya, untuk menaruh semua file di luar file HTML dan PHP.

Di dalam direktori asset ini dibuat beberapa subdirektori seperti:
  • images -- subdirektori yang akan berisi file-file image atau gambar yang akan digunakan oleh aplikasi
  • css -- digunakan untuk menyimpan file CSS aplikasi
  • js -- untuk menyimpan script JavaScript, program yang akan dijalankan di dalam browser
  • files atau data -- menyimpan file-file selain images, css, dan js.



Membuat Form Dengan Helper Form

Form adalah elemen dalam elemen dalam suatu halaman web yang digunakan untuk menerima input dari pengguna aplikasi atau pengunjung halaman web kita.

Dalam pemrograman web tanpa framework, kita akan menyusun form dengan menuliskan tag-tag elemen input form secara manual, seperti berikut:

<form action="simpankomentar.php" method="post">
<label>Nama :</label>
<input type="text" name="namapengunjung" size="50" maxlength="75">
<br />
<label>Email :</label>
<input type="text" name="email" size="50" maxlength="75">
<br />
<label>Komentar :</label>
<textarea rows="5" cols="40" name="komentar"></textarea>
<br />
<button type="submit">Kirim</button>
   </form>

Form dinyatakan di dalam file view.


Jika kita menggunakan CodeIgniter, maka kita dimudahkan untuk bisa menampilkan form, dengan menggunakan helper form. Setiap elemen input dari form dinyatakan terlebih dahulu dengan menggunakan array asosiatif, kemudian menggunakan fungsi helper untuk setiap elemen input, untuk menghasilkan tag elemen input form.


Berikut adalah kode yang sama, yang akan menghasilkan form yang sama:

<?php
$aksi="simpankomentar";
$namapengunjung=array(
"name"=>"namapengunjung"
,"size"=>"50"
,"maxlength"=>"100"
);
$email=array(
"name"=>"email"
,"size"=>"50"
,"maxlength"=>"100"
);
$komentar=array(
"name"=>"komentar"
,"rows"=>"5"
,"cols"=>"40"
);
echo form_open($aksi);
echo form_label("Nama : ").form_input($namapengunjung);
echo br();
echo form_label("Email : ").form_input($email);
echo br();
echo form_label("Komentar : ").form_textarea($komentar);
echo br();
echo form_close();
?>

CodeIgniter mendefinisikan setiap elemen form secara default akan memiliki method post, karenanya fungsi form_open() hanya membutuhkan parameter nama script aksi, yang akan memroses data yang akan dikirimkan oleh browser.


Selasa, 03 Juli 2012

Pembacaan Data Dengan Librari Class Input

Librari class input adalah librari yang disediakan oleh CodeIgniter untuk memudahkan pembacaan data input yang dikirimkan oleh pengguna aplikasi web.

Librari class input akan secara otomatis dimuat oleh CodeIgniter, sehingga pengembang bisa langsung menggunakannya, tidak perlu melakukan pemuatan librari terlebih dahulu.

Sintaks pembacaan:

$varpenampung=$this->input->post("namaelemen"); 
namaelemen adalah nama elemen input yang dikirimkan form aplikasi dari browser web
$varpenampung adalah nama variabel yang digunakan untuk menampung data dari browser

Jika kita tidak menggunakan librari class input, maka kita harus menggunakan variabel server $_POST, dengan menggunakan key nama elemen input dari form browser web.

Librari class input dengan fungsi post() di atas, membantu pengembang aplikasi web untuk terhindar dari kesalahan yang disebabkan nama elemen input yang dimasukkan salah. Jika kita menggunakan $_POST langsung, maka kita akan mendapatkan pesan kesalahan, jika nama elemen input salah.

Pada pembahasan ini, kita menggunakan fungsi post(), karena secara default data yang akan dikirimkan dari browser web, jika kita menggunakan CodeIgniter sebagai backendnya, harus menggunakan method post pada atribut formnya.

Untuk menghindari kesalahan penggunaan $_POST untuk membaca data input yang dikirimkan oleh pengguna web, maka pengembang aplikasi harus melakukan pemeriksaan terlebih dahulu, apakah nama elemen input yang dimaksud ada atau tidak, jika tidak ada maka kita akan memberikan nilai default; seperti kode berikut:


$varpenampung=(isset($_POST["namaelemen"]))?$_POST["namaelemen"]:""; 
namaelemen adalah nama elemen input yang dikirimkan form aplikasi dari browser web
$varpenampung adalah nama variabel yang digunakan untuk menampung data dari browser
Pembacaan langsung dengan menggunakan $_POST harus dilakukan menggunakan assignmen yang di dalamnya ada operasi pemilihan ternary. Kita harus menggunakan fungsi isset() untuk memastikan terlebih dahulu, apakah item elemen $_POST ada atau tidak, jika ada, maka $varpenampung akan diisi dengan menggunakan $_POST["namaelemen"], jika tidak ada, maka yang diisikan adalah data kosong.

$this->input->post() akan secara otomatis melakukan proses pemeriksaan dan pemberian data default jika key untuk elemen $_POST tersebut tidak ada.

Setelah penghindaran kesalahan telah dilakukan oleh librari class input, maka pengembang aplikasi bisa lebih fokus untuk bagaimana memroses data selanjutnya.




Minggu, 01 Juli 2012

Helper HTML : br()

Helper HTML CI br() digunakan untuk menghasilkan elemen ganti baris, yaitu <br />

Fungsi helper br() ini ternyata dapat memiliki parameter berupa nilai integer yang digunakan untuk menghasilkan berapa kali <br /> harus dihasilkan.

Dengan parameter ini, maka kita tidak perlu menulis echo br(); berkali-kali untuk menghasilkan sejumlah <br />, tetapi cukup dengan echo br(5); untuk menghasilkan <br /> sejumlah 5 kali.

Berikut adalah contoh view yang digunakan untuk menunjukkan penggunaan br():


<?php
$this->load->helper("html");
echo doctype("html");
?>
<html>
<head>
  <title>Demo Menggunakan br()</title>
</head>
<body>
<?php
echo heading("Demo Menggunakan br()",1);
echo "<p>Baris pertama dalam paragraf";
echo br(5);
echo "Baris ketujuh dalam paragraf";
?>
</body>
</html>
?>

View di atas, digunakan untuk menampilkan satu paragraf, tetapi baris pertama dan ketujuh terpisah dengan baris kosong. Baris kosong dihasilkan oleh fungsi br();