Pada modul ini kita akan berlatih membuat aplikasi Agenda yang memuat daftar kegiatan harian.
Agenda ini memuat beberapa kegiatan yang akan kita lakukan beserta prioritas dan status
keterlaksanaannya.
Kita tidak lagi memanfaatkan fitur scaffolding, melainkan akan membuat controller sendiri.
Fungsi-fungsi yang akan kita tambahkan pada modul ini adalah: Edit dan Delete. View akan kita
modifikasi untuk menampilkan hanya item kegiatan yang sudah diselesaikan/belum dilaksanakan.
Modul ini akan diakhiri dengan cara membuat homepage sebagai halaman utama aplikasi Agenda
ini.
(1) Buka file items_controller.php, tambahkan metode dengan nama edit pada klas
ItemsController.
(2) Buat file baru di Agenda/app/views/items dengan nama edit.ctp. Sunting file
edit.ctp, tambahkan kode berikut:
(3) Fungsi edit ini akan kita eksekusi melalui halaman index, pada kolom Aksi. Untuk itu, mari kita
tambahkan link di halaman index. Buka file index.ctp, ubah bagian <!—-disinilah daftar
aksi yang nanti akan kita tambahkan--> dengan kode berikut:
Kita telah berhasil menampilkan seluruh Agenda kita yang ada di tabel items. Perhatikan bahwa
kolom Aksi sudah ada link <Edit>. Klik pada link ini untuk membuka halaman editing (edit.ctp).
Sekarang kita tambahkan link pada halaman Edit ini untuk membuka seluruh Agenda dan untuk
menambah Agenda baru. Tambahkan kode di bawah ini di bagian akhir file edit.ctp.
Dengan demikian kita dapat menuju ke halaman index atau menambahkan Agenda baru dari
halaman Editing ini.
Seperti biasanya, kita akan menambahkan fungsi delete di bagian controller. Tapi, tidak seperti
aksi lainnya, aksi delete tidak membutuhkan View. Kita hanya akan menambahkan link <Delete>
di kolom Aksi pada halaman index.
(1) Buka file items_controller.php, tambahkan metode dengan nama add pada klas
ItemsController. Inilah kodenya:
(2) Fungsi delete di atas akan kita pasang di halaman utama pada kolom Aksi, untuk itu mari kita
tambahkan link <Delete> di index.ctp. Tambahkan baris kode program berikut di bawah link
Edit:
<?php echo $html->link('Delete', array('action'=>'delete',
$item['Item']['id']), null, 'Anda yakin akan
menghapus item Agenda ini?'); ?>
Link <Delete> telah ditambahkan di samping link Edit. Jika kita hendak menghapus item Agenda,
klik pada link Delete maka akan muncul jendela peringatan:
Bagaimana caranya agar aplikasi buku Agenda kita dapat menyeleksi menampilkan hanya agenda
yang belum diselesaikan saja? Atau sebaliknya, menampilkan daftar agenda yang telah
diselesaikan?
Ya, dalam konsep basis data, seleksi seperti dimaksud diselesaikan dengan cara memberikan filter
pada perintah SQL menggunakan klausa WHERE. Bagaimana hal tersebut kita eksekusi pada
CakePHP? Ini dia caranya!
(1) Buka komponen Controller Anda (ya, filenya disimpan di Agenda/app/controllers/), ganti
fungsi index() dengan dengan berikut ini:
1 function index($status = null) {
2 if ($status == 'selesai')
3 $items = $this->Item->find('all', array('conditions' =>
array('Item.diselesaikan' => '1')));
4 else if ($status == 'belum')
5 $items = $this->Item->find('all', array('conditions' =>
array('Item.diselesaikan' => '0')));
6 else
7 $items = $this->Item->find('all');
8 $this->set('items', $items);
9 $this->set('status', $status);
10 }
Modifikasi di atas adalah menambahkan parameter $status pada aksi index. Jika $status =
'selesai', maka fungsi ini akan memanggil fungsi find() dengan kondisi: $this->Item-
>find('all', array('conditions' => array('Item.diselesaikan' => '1'))).
Disini, kita memberitahu model Item untuk mengembalikan hanya item-item kolom ‘diselesaikan’
yang bernilai 1.
Atau item yang belum diselesaikan, yaitu kolom ‘diselesaikan’ memiliki nilai 0. Jika $status =
'pending', maka fungsi index() ini akan mengembalikan hanya item-item yang belum
diselesaikan, yaitu yang bernilai 0.
Terakhir, jika $status tidak didefinisikan, maka fungsi index() akan mengembalikan seluruh
item yang ada di tabel.
(2) Untuk mengakses fungsi index() yang menyeleksi agenda yang telah/belum diselesaikan di
atas, kita tambahkan link di halaman index, tambahkan baris-baris kode berikut di bagian akhir file
index.ctp:
(1) Buat file home.ctp di folder Agenda/app/views/pages. Tambahkan baris-baris kode berikut:
(2) Testing! Buka URL http://localhost/Agenda untuk menampilkan homepage kita ini.
Setiap halaman yang tidak memiliki aksi controller harus diletakkan di folder pages. Untuk
mengakses halaman ini, kita arahkan browser kita ke URL: http://localhost/Agenda/pages/<view
nama file>.Dalam hal homepage yang baru saja kita tulis, mestinya kita memanggilnya dengan
URL: http://localhost/Agenda/pages/home.
Tetapi CakePHP menetapkan home.ctp sebagai view default untuk aplikasi yang dikembangkan.
So, kita tidak perlu repot-repot menuliskan URL panjang lebar, cukup ringkas karena CakePHP
otomatis akan mengarahkan ke .../views/pages/home.ctp.
Latihan
Modifikasi aplikasi pengelolaan matakuliah pada Modul 4 dengan menambahkan fungsi-fungsi
sebagaimana di bahas pada modul ini.