112
Hands-On Lab Code Igniter 2.1.0 Created By : Willy Achmat Fauzi Lab version : 1.0 Last updated : 3/16/2012

Documentci

Embed Size (px)

Citation preview

Page 1: Documentci

Hands-On Lab

Code Igniter 2.1.0

Created By : Willy Achmat Fauzi

Lab version : 1.0

Last updated : 3/16/2012

Page 2: Documentci

Contents

OVERVIEW ............................................................................................................................................. 4

BAB 1: KONFIGURASI CODEIGNITER .................................................................................................. 5 Task 1 – Konfigurasi CodeIgniter ...................................................................................................... 5

Task 2 – Konfigurasi Tema ................................................................................................................ 6

BAB 2: MEMBUAT LAYOUT UTAMA..................................................................................................... 8 Task 1 – Membuat Controller ........................................................................................................... 8

Task 2 – Membuat View Template ................................................................................................... 8

BAB 3: DATA MODELING .................................................................................................................... 23 Task 1 – Membuat Conceptual Data Model .................................................................................... 23

Task 2 – Relationship pada CDM .................................................................................................... 27

Task 3 – Phisical Data Model .......................................................................................................... 31

Task 4 – Generate Script ................................................................................................................ 33

Task 5 – Intellisense Pada Netbeans & CodeIgniter ........................................................................ 36

BAB 4: MANAJEMEN CONTROLLER ................................................................................................. 38 Task 1 – Inhertiance Pada CodeIgniter Controller ........................................................................... 38

Task 2 – Menampilkan menu secara dinamis ................................................................................. 39

Task 3 – Clean URL pada XAMPP web server .................................................................................. 48

BAB 5: PENGATURAN HAK AKSES ................................................................................................... 50 Task 1 – Pembuatan Desain Halaman Login.................................................................................... 50

Task 2 – Redirect ke halaman login ................................................................................................ 53

Task 3 – Mekanisme Login ............................................................................................................. 54

Task 4 – Pembatasan Hak Akses (menu) ......................................................................................... 64

BAB 6: CRUD ..................................................................................................................................... 68 Task 1 – Menampilkan Data ........................................................................................................... 68

Task 2 – Menambahkan Fitur Pagging ............................................................................................ 73

Task 3 – Insert Data ....................................................................................................................... 80

Task 4 – Edit Data .......................................................................................................................... 93

Task 5 – Delete Data ...................................................................................................................... 99

Task 6 – Validation Rule ............................................................................................................... 102

Page 3: Documentci

BAB 7: BULK ACTION ..................................................................................................................... 109

BAB 8: PATTERN IMPLEMENTATION ............................................................................................ 110

BAB 9: CODE GENERATION ........................................................................................................... 111

BAB 10: AJAX & JQUERY ............................................................................................................... 112

Page 4: Documentci

Overview

Pada pelatihan ini difokuskan untuk dapat membuat aplikasi sederhana dengan codeigniter dan power

designer 15 sebagai database modeler.

Objectives

Pada pelatihan ini akan dibahas tentang :

Code Igniter

◦ MVC

◦ Session

◦ Pagging

◦ Authentication

◦ Menu Management

Power Designer

◦ Data Modeling (CDM, PDM)

◦ Code Generation

System Requirements

Perlu disiapkan software berikut untuk dapat mengikuti lab ini:

XAMPP

Power Designer 15

Netbeans 7.1

Code Igniter 2.1

Page 5: Documentci

BAB 1: Konfigurasi CodeIgniter

Pada bab ini akan dibahas bagaimana konfigurasi CodeIgniter yang akan berjalan di web server Apache.

Sebelumnya install terlebih dahulu XAMPP, Power Designer 15 dan Netbeans 7.1.

Task 1 – Konfigurasi CodeIgniter

Download CodeIgniter versi 2.1 pada alamat web:

http://codeigniter.com/downloads/

Setelah itu extract dan pindahkan ke web server pada folder :

C:\xampp\htdocs\training

Buat project baru pada Netbeans :

File -> New Project -> PHP -> PHP Application From Exsisting Source.

Kemudian arahkan source folder ke folder yang telah di-copy-kan source code CodeIgniter.

Sehingga struktur file akan tampak seperti berikut :

Page 6: Documentci

Setelah membuat project kita akan melakukan konfigurasi awal untuk CodeIgniter.

File yang harus kita konfigurasi: config.php, database.php, autoload.php dan route.php,

semua file ini berada di dalam folder yang sama "application/system/config".

config.php

$config['base_url'] = "http://localhost/training/";

$config['encryption_key'] = 'codeignitertraining';

database.php

$db['default']['hostname'] = "localhost";

$db['default']['username'] = "root";

$db['default']['password'] = "";

$db['default']['database'] = "training";

$db['default']['dbdriver'] = "mysql";

autoload.php

$autoload['libraries'] = array('database', 'session');

$autoload['helper'] = array('url', 'form');

route.php

$route['default_controller'] = "dashboard";

Dari setting-setting di atas ‘base url’ adalah dimana halaman utama berada, kemudian database adalah

pengaturan koneksi ke database, sedangkan autoload adalah modul-modul apa saja yang

diinisialisasikan di awal program, sehingga tidak perlu tiap kali dibutuhkan dipanggil secara berulang-

ulang. Terakhir adalah ‘default controller’ yaitu fungsi yang pertama dipanggil bila alamat ‘base url’ yang

di set sebelumnya dipanggil.

Task 2 – Konfigurasi Tema

Download tema pada alamat web :

http://www.netdreams.co.uk/index.php/blog/2010/02/18/free-admin-skin-available-for-download/

Page 7: Documentci

Buat folder assets pada direktori training.

C:\xampp\htdocs\training\assets

Extract file admin-xhtml, dan pindahkan beberapa direktori ke direktori asset antara lain :

- css

- images

- js

Sehingga struktur file yang baru akan menjadi seperti berikut :

Page 8: Documentci

BAB 2: Membuat Layout Utama

Pada bab ini akan difokuskan untuk membuat layout utama dengan tema yang telah disiapkan

sebelumnya, dan cara mengatur view agar lebih hemat kode dan mudah untuk di maintenance.

Task 1 – Membuat Controller

Sebelumnya kita telah mengatur default_controller pada file route.php. Sehingga controller inilah yang

pertama akan dijalankan saat kita membuka base uri dari web site yang telah kita konfigurasi. Controller

tersebut sebelumnya kita set dengan nama “dashboard”.

Untuk membuat controller sesuai dengan konfigurasi tersebut ikuti langkah-langkah berikut ini :

1. Buat file dengan nama dashboard.php pada direktori “training/applications/controllers/”.

2. Isi file tersebut dengan source code berikut :

dashboard.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class dashboard extends CI_Controller

{

function index(){

echo “Dashboard”;

}

}

?>

3. Buka halaman http://localhost/training/

Setelah menjalankan langkah tersebut maka pada layar web browser akan di tampilkan teks

“Dashboard” sesuai dengan yang kita tuliskan pada function index di class dashboard.

Task 2 – Membuat View Template

Pada kali kita akan membuat view lebih terorganisasi dengan baik, kode tidak perlu dituliskan secara

berulang-ulang pada controller pada beberapa view yang dipisahkan.

Berikut adalah contoh bila kita load view pada controller bila tema header, content, footer dan menu

dipisahkan.

Page 9: Documentci

Bila ada banyak halaman maka tentunya kita akan menuliskan ulang kode-kode yang sama, seperti

halnya yang terlihat seperti diatas, untuk mengurangi penulisan ulang kode-kode tersebut kita dapat

membuat sebuah Template View yang mengorganisasi semua view yang akan dipanggil. Contoh seperti

pada gambar berikut :

Sehingga pada controller kita akan menghemat baris menjadi seperti berikut :

Page 10: Documentci

Seperti yang telah kita ketahui bahwa pada MVC pattern View digunakan sebagai User Interface

(Tampilan) yang terpisah dengan alur proses (rule). Untuk membuat Template View dapat dilakukan

dengan cara:

1. Buat file dengan nama container.php pada direktori “training/applications/views/”.

2. Isi file tersebut dengan source code berikut :

container.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<?php

$this->load->view('part/meta');

$this->load->view('part/script');

?>

</head>

<body>

<?php

$this->load->view('part/header');

$this->load->view('part/menu');

$this->load->view($page);

$this->load->view('part/footer');

?>

</body>

</html>

3. Kemudian buat direktori part pada direktori “training/applications/views/”. Setelah itu buat 5 file

sebagai berikut :

meta.php

script.php

header.php

menu.php

footer.php

4. Dari tema yang telah kita download terdapat file text.html yang berisi satu halaman penuh halaman

web yang telah tertata rapi, seperti pada gambar berikut :

Page 11: Documentci

Buka source code dan kita pisahkan menjadi 5 bagian seperti yang telah kita atur sebelumnya.

Setelah kita pisahkan maka masing-masing file menjadi seperti berikut :

meta.php

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>{{title}}</title>

script.php

<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/screen.css" type="text/css"

media="screen" title="default" />

<!--[if IE]>

<link rel="stylesheet" media="all" type="text/css" href="<?php echo base_url();

?>assets/css/pro_dropline_ie.css" />

<![endif]-->

<!-- jquery core -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery-1.4.1.min.js"

type="text/javascript"></script>

<!-- checkbox styling script -->

<script src="<?php echo base_url(); ?>assets/js/jquery/ui.core.js" type="text/javascript"></script>

<script src="<?php echo base_url(); ?>assets/js/jquery/ui.checkbox.js"

type="text/javascript"></script>

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.bind.js"

type="text/javascript"></script>

<script type="text/javascript">

$(function(){

Page 12: Documentci

$('input').checkBox();

$('#toggle-all').click(function(){

$('#toggle-all').toggleClass('toggle-checked');

$('#mainform input[type=checkbox]').checkBox('toggle');

return false;

});

});

</script>

<![if !IE 7]>

<!-- styled select box script version 1 -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.selectbox-0.5.js"

type="text/javascript"></script>

<script type="text/javascript">

$(document).ready(function() {

$('.styledselect').selectbox({ inputClass: "selectbox_styled" });

});

</script>

<![endif]>

<!-- styled select box script version 2 -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.selectbox-0.5_style_2.js"

type="text/javascript"></script>

<script type="text/javascript">

$(document).ready(function() {

$('.styledselect_form_1').selectbox({ inputClass: "styledselect_form_1" });

$('.styledselect_form_2').selectbox({ inputClass: "styledselect_form_2" });

});

</script>

<!-- styled select box script version 3 -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.selectbox-0.5_style_2.js"

type="text/javascript"></script>

<script type="text/javascript">

$(document).ready(function() {

$('.styledselect_pages').selectbox({ inputClass: "styledselect_pages" });

});

</script>

<!-- styled file upload script -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.filestyle.js"

type="text/javascript"></script>

<script type="text/javascript" charset="utf-8">

$(function() {

$("input.file_1").filestyle({

Page 13: Documentci

image: "images/forms/upload_file.gif",

imageheight : 29,

imagewidth : 78,

width : 300

});

});

</script>

<!-- Custom jquery scripts -->

<script src="<?php echo base_url(); ?>assets/js/jquery/custom_jquery.js"

type="text/javascript"></script>

<!-- Tooltips -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.tooltip.js"

type="text/javascript"></script>

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.dimensions.js"

type="text/javascript"></script>

<script type="text/javascript">

$(function() {

$('a.info-tooltip ').tooltip({

track: true,

delay: 0,

fixPNG: true,

showURL: false,

showBody: " - ",

top: -35,

left: 5

});

});

</script>

<!-- date picker script -->

<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/datePicker.css" type="text/css" />

<script src="<?php echo base_url(); ?>assets/js/jquery/date.js" type="text/javascript"></script>

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.datePicker.js"

type="text/javascript"></script>

<script type="text/javascript" charset="utf-8">

$(function()

{

// initialise the "Select date" link

$('#date-pick')

.datePicker(

// associate the link with a date picker

{

createButton:false,

startDate:'01/01/2005',

endDate:'31/12/2020'

Page 14: Documentci

}

).bind(

// when the link is clicked display the date picker

'click',

function()

{

updateSelects($(this).dpGetSelected()[0]);

$(this).dpDisplay();

return false;

}

).bind(

// when a date is selected update the SELECTs

'dateSelected',

function(e, selectedDate, $td, state)

{

updateSelects(selectedDate);

}

).bind(

'dpClosed',

function(e, selected)

{

updateSelects(selected[0]);

}

);

var updateSelects = function (selectedDate)

{

var selectedDate = new Date(selectedDate);

$('#d option[value=' + selectedDate.getDate() + ']').attr('selected', 'selected');

$('#m option[value=' + (selectedDate.getMonth()+1) + ']').attr('selected', 'selected');

$('#y option[value=' + (selectedDate.getFullYear()) + ']').attr('selected', 'selected');

}

// listen for when the selects are changed and update the picker

$('#d, #m, #y')

.bind(

'change',

function()

{

var d = new Date(

$('#y').val(),

$('#m').val()-1,

$('#d').val()

);

$('#date-pick').dpSetSelected(d.asString());

}

);

// default the position of the selects to today

var today = new Date();

Page 15: Documentci

updateSelects(today.getTime());

// and update the datePicker to reflect it...

$('#d').trigger('change');

});

</script>

<!-- MUST BE THE LAST SCRIPT IN <HEAD></HEAD></HEAD> png fix -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.pngFix.pack.js"

type="text/javascript"></script>

<script type="text/javascript">

$(document).ready(function(){

$(document).pngFix( );

});

</script>

Untuk link kita tambahkan source code :

<?php echo base_url(); ?>assets/

Hal ini karena css, js dan image kita pindahkan ke direktori assets pada awal konfigurasi, dan

base_url() akan berisi http://localhost/training sehingga kita mendapatkan alamat style dan script

yang benar.

header.php

<div id="page-top-outer">

<!-- Start: page-top -->

<div id="page-top">

<!-- start logo -->

<div id="logo">

<a href=""><img width="156" height="40" alt="" src="<?php echo base_url();

?>assets/images/shared/logo.png"></a>

</div>

<!-- end logo -->

<!-- start top-search -->

<div id="top-search">

<table border="0" cellpadding="0" cellspacing="0">

<tr>

<td><input type="text" value="Search" onblur="if (this.value=='') { this.value='Search';

}" onfocus="if (this.value=='Search') { this.value=''; }" class="top-search-inp" /></td>

<td>

<select class="styledselect">

<option value=""> All</option>

<option value=""> Products</option>

<option value=""> Categories</option>

<option value="">Clients</option>

<option value="">News</option>

Page 16: Documentci

</select>

</td>

<td>

<input type="image" src="<?php echo base_url(); ?>assets/images/shared/top_search_btn.gif"

/>

</td>

</tr>

</table>

</div>

<!-- end top-search -->

<div class="clear"></div>

</div>

<!-- End: page-top -->

</div>

<div class="clear">&nbsp;</div>

menu.php

<div class="nav-outer-repeat">

<!-- start nav-outer -->

<div class="nav-outer">

<!-- start nav-right -->

<div id="nav-right">

<div class="nav-divider">&nbsp;</div>

<div class="showhide-account active"><img width="93" height="14" alt="" src="<?php echo

base_url(); ?>assets/images/shared/nav/nav_myaccount.gif"></div>

<div class="nav-divider">&nbsp;</div>

<a id="logout" href=""><img width="64" height="14" alt="" src="<?php echo base_url();

?>assets/images/shared/nav/nav_logout.gif"></a>

<div class="clear">&nbsp;</div>

<!-- start account-content -->

<div class="account-content" style="display: none;">

<div class="account-drop-inner">

<a id="acc-settings" href="">Settings</a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-details" href="">Personal details </a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-project" href="">Project details</a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-inbox" href="">Inbox</a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

Page 17: Documentci

<a id="acc-stats" href="">Statistics</a>

</div>

</div>

<!-- end account-content -->

</div>

<!-- end nav-right -->

<!-- start nav -->

<div class="nav">

<div class="table">

<ul class="select"><li><a href="#nogo"><b>Dashboard</b><!--[if IE 7]><!--></a><!--

<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]-->

<div class="select_sub">

<ul class="sub">

<li><a href="#nogo">Dashboard Details 1</a></li>

<li><a href="#nogo">Dashboard Details 2</a></li>

<li><a href="#nogo">Dashboard Details 3</a></li>

</ul>

</div>

<!--[if lte IE 6]></td></tr></table></a><![endif]-->

</li>

</ul>

<div class="nav-divider">&nbsp;</div>

<ul class="current"><li><a href="#nogo"><b>Products</b><!--[if IE 7]><!--></a><!--

<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]-->

<div class="select_sub show">

<ul class="sub">

<li><a href="#nogo">View all products</a></li>

<li class="sub_show"><a href="#nogo">Add product</a></li>

<li><a href="#nogo">Delete products</a></li>

</ul>

</div>

<!--[if lte IE 6]></td></tr></table></a><![endif]-->

</li>

</ul>

<div class="nav-divider">&nbsp;</div>

<ul class="select"><li><a href="#nogo"><b>Categories</b><!--[if IE 7]><!--></a><!--

<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]-->

<div class="select_sub">

<ul class="sub">

Page 18: Documentci

<li><a href="#nogo">Categories Details 1</a></li>

<li><a href="#nogo">Categories Details 2</a></li>

<li><a href="#nogo">Categories Details 3</a></li>

</ul>

</div>

<!--[if lte IE 6]></td></tr></table></a><![endif]-->

</li>

</ul>

<div class="nav-divider">&nbsp;</div>

<ul class="select"><li><a href="#nogo"><b>Clients</b><!--[if IE 7]><!--></a><!--

<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]-->

<div class="select_sub">

<ul class="sub">

<li><a href="#nogo">Clients Details 1</a></li>

<li><a href="#nogo">Clients Details 2</a></li>

<li><a href="#nogo">Clients Details 3</a></li>

</ul>

</div>

<!--[if lte IE 6]></td></tr></table></a><![endif]-->

</li>

</ul>

<div class="nav-divider">&nbsp;</div>

<ul class="select"><li><a href="#nogo"><b>News</b><!--[if IE 7]><!--></a><!--

<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]-->

<div class="select_sub">

<ul class="sub">

<li><a href="#nogo">News details 1</a></li>

<li><a href="#nogo">News details 2</a></li>

<li><a href="#nogo">News details 3</a></li>

</ul>

</div>

<!--[if lte IE 6]></td></tr></table></a><![endif]-->

</li>

</ul>

<div class="clear"></div>

</div>

<div class="clear"></div>

</div>

<!-- start nav -->

</div>

<div class="clear"></div>

Page 19: Documentci

<!-- start nav-outer -->

</div>

<div class="clear"></div>

footer.php

<div id="footer">

<!-- start footer-left -->

<div id="footer-left">

Admin Skin &copy; Copyright Internet Dreams Ltd. <span id="spanYear"></span> <a

href="">www.netdreams.co.uk</a>. All rights reserved.</div>

<!-- end footer-left -->

<div class="clear">&nbsp;</div>

</div>

5. Setelah dipisahkan buat satu buah view kembali dengan nama dashboard_view.php pada direktori

“training/application/views”:

Kemudian isi file dengan source code berikut :

dashboard_view.php

<div id="content-outer">

<!-- start content -->

<div id="content">

<!-- start page-heading -->

<div id="page-heading">

<h1>Add product</h1>

</div>

<!-- end page-heading -->

<table width="100%" cellspacing="0" cellpadding="0" border="0" id="content-table">

<tbody><tr>

<th class="sized" rowspan="3"><img width="20" height="300" alt="" src="<?php echo

base_url(); ?>assets/images/shared/side_shadowleft.jpg"></th>

<th class="topleft"></th>

<td id="tbl-border-top">&nbsp;</td>

<th class="topright"></th>

<th class="sized" rowspan="3"><img width="20" height="300" alt="" src="<?php echo

base_url(); ?>assets/images/shared/side_shadowright.jpg"></th>

</tr>

<tr>

<td id="tbl-border-left"></td>

<td>

<!-- start content-table-inner

...................................................................... START -->

<div id="content-table-inner">

<!-- start table-content -->

<div id="table-content">

<h2>Sub Heading </h2>

Page 20: Documentci

<h3>Local Heading</h3>

Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor

incididunt ut labore et Lorem ipsum dolor sit amet consectetur

adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna

aliqua. dolore magna aliqua. Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod

tempor incididunt ut labore et Lorem ipsum dolor sit amet consectetur

<br>

<br>

Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor

incididunt ut labore et Lorem ipsum dolor sit amet consectetur

adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna

aliqua. dolore magna aliqua. Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod

tempor incididunt ut labore et Lorem ipsum dolor sit amet consectetur

<br>

<br>

Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor

incididunt ut labore et Lorem ipsum dolor sit amet consectetur

adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna

aliqua. dolore magna aliqua. Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod

tempor incididunt ut labore et Lorem ipsum dolor sit amet consectetur

</div>

<!-- end table-content -->

<div class="clear"></div>

</div>

<!-- end content-table-inner ............................................END -->

</td>

<td id="tbl-border-right"></td>

</tr>

<tr>

<th class="sized bottomleft"></th>

<td id="tbl-border-bottom">&nbsp;</td>

<th class="sized bottomright"></th>

</tr>

</tbody></table>

<div class="clear">&nbsp;</div>

</div>

<!-- end content -->

<div class="clear">&nbsp;</div>

</div>

<div class="clear">&nbsp;</div>

Sehingga saat ini struktur file pada view terlihat seperti berikut :

Page 21: Documentci

6. Maka proses selanjutnya adalah membuat Controller yang memanggil view-view yang telah kita

buat sebelumnya.

Ubah file dashboard.php pada direktori controllers menjadi seperti berikut :

dashboard.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class dashboard extends CI_Controller {

function index() {

$data['page'] = 'dashboard_view';

$this->load->view('container', $data);

}

}

?>

7. Silahkan akses halaman http://localhost/training/ maka output pada browser akan terlihat seperti

berikut :

Page 22: Documentci
Page 23: Documentci

BAB 3: Data Modeling

Pada bab ini akan difokuskan untuk membuat database user, role dan menu dengan menggunakan

editor power designer, mulai dari CDM, PDM hingga export ke MySQL database serta membuat class-

class Model pada CodeIgniter.

Task 1 – Membuat Conceptual Data Model

CDM adalah model yang dibuat berdasarkan anggapan bahwa dunia nyata terdiri dari koleksi obyek-

obyek dasar yang dinamakan entitas (entity) serta hubungan (relationship) antara entitas-entitas itu.

Manfaat Penggunaan CDM dalam perancangan database :

Memberikan gambaran yang lengkap dari struktur basis data yaitu arti, hubungan, dan batasan-

batasan.

Alat komunikasi antar pemakai basis data, designer, dan analis.

1. Buka power designer 15, dan buat project baru dengan cara klik pada menu “File” -> “New Project”

beri nama ‘trainingci’.

2. Setelah itu buat Conceptual Data Model diagram, klik pada menu “File” -> “New Model”, maka

akan muncul dialog seperti berikut :

Page 24: Documentci

Pilih tab “Categories” -> “Information” -> “Conceptual Data” dan beri nama model “CDM Training”,

kemudian klik tombol “OK”, seperti yang terlihat pada gambar diatas.

3. Setelah CDM ditambahkan pada project simpan data, “File” -> “Save”. Kemudian aktifkan

Diagram_1 di dalam CDM Training.

4. Buat Entity (entitas), dengan menggunakan toolbox disebelah kanan diagram, entitas terlihat seperti

pada gambar di bawah.

Klik pada diagram, buat tiga entitas, seperti terlihat pada gambar berikut :

5. Klik 2x Pada Entity_1, isikan data sesuai dengan data berikut :

Page 25: Documentci

Name : m_user

Attributes :

No Name Code Data Type Length M P D

1 userid USERID Long integer v v v

2 user_name USER_NAME Variable characters (30) 30 v v

3 user_password USER_PASSWORD Variable characters (100)

100 v v

4 user_active USER_ACTIVE Boolean v v

Sehingga terlihat seperti pada gambar berikut :

Page 26: Documentci

Saat userid kita pilih sebagai (P) Primary maka akan pada tab Identifier akan ditambahkan record

dengan nama Identifier_1. Agar tidak membingungkan nantinya maka nama kita ubah dengan

pk_userid.

6. Setelah selesai maka pada diagram akan terlihat seperti berikut :

7. Langkah selanjutnya adalah mengubah dua entitas lainnya dengan nilai sebagai berikut :

Untuk Entity_2

Name : m_role

Attributes :

No Name Code Data Type Length M P D

1 roleid ROLEID Long integer v v v

2 role_name ROLE_NAME Variable characters (30) 30 v v

3 role_description ROLE_DESCRIPTION Variable characters (120) 120 v

Identity : pk_menuid

Untuk Entity_3

Page 27: Documentci

Name : m_menu

Attributes :

No Name Code Data Type Length M P D

1 menuid MENUID Long integer v v v

2 menu_name MENU_NAME Variable characters (30) 30 v v

3 menu_description

MENU_DESCRIPTION

Variable characters (120) 120 v

4 menu_active MENU_ACTIVE Boolean v v

Identity : pk_menuid

8. Setelah selesai maka pada diagram akan terlihat seperti berikut :

Task 2 – Relationship pada CDM

1. Untuk membuat relasi antara entitas klik pada notasi relationship yang ditunjukkan pada gambar

berikut :

Page 28: Documentci

2. Drag dari entitas satu ke entitas yang lain, hingga membentuk sebuah garis penghubung. Kali ini

yang direlasikan adalah :

Menu -> Role

Role -> User

3. Maka hasil outputnya akan terlihat seperti berikut :

4. Klik 2x pada Relationship_1, Ubah relasi m_menu dengan m_role menjadi seperti berikut :

Ubah Name menjadi m_role2menu dan Cardinalities menjadi Many to Many seperti terlihat pada

gambar berikut :

Page 29: Documentci

Kemudian klik OK.

5. Langkah selanjutnya hampir sama dengan langkah sebelumnya yaitu mengubah relasi dari m_user

ke m_role. Klik 2x pada Relationship_2, Ubah relasi m_user dengan m_role menjadi seperti

berikut :

Page 30: Documentci

Ubah Name menjadi m_user2role dan Cardinalities menjadi One to Many seperti terlihat pada

gambar berikut :

Kemudian klik OK.

6. Pastikan diagram anda sesuai dengan gambar berikut :

Page 31: Documentci

Task 3 – Phisical Data Model

PDM Merupakan model yang menggunakan sejumlah tabel untuk menggambarkan data serta hubungan

antara data-data tersebut. Setiap tabel mempunyai sejumlah kolom di mana setiap kolom memiliki

nama yang unik.

Phisical Data Model sangat erat hubungannya dengan perancangan database secara fisik. Dalam

permodelan PDM dapat diturunkan dari CDM, karena sebenarnya dimana tabel-tabel dapat didapatkan

dari logika analisis pada Conceptual Data Model.

Pada power designer untuk membuat Phisical Data Model dari Conceptual Data Model adalah sebagai

berikut :

1. Klik pada Tools -> Generate Phisical Data Model …

2. Setelah muncul window silahkan ubah DBMS menjadi MySQL 5.0 dan Name menjadi PDM Training,

yang terlihat seperti berikut :

Kemudian klik tombol OK.

3. Setelah itu pastikan diagram pada CDM terlihat seperti berikut :

Page 32: Documentci

Kenapa muncul tabel baru? Hal tersebut dikarenakan Relationship pada Conceptual Data Model kita

buat Many to Many. Seperti yang saya jelaskan sebelumnya bahwa Conceptual Data Model adalah

objek dasar yang berdasarkan analisis. Bagaimana implementasi untuk Many to Many di database

sebenarnya adalah membuat tabel diantara dua tabel yang dihubungkan.

4. Auto Increment hanya ada pada Phisical Data Model dengan Jenis database tertentu, sehingga

karena kita tidak bisa mendefinisikan Auto Increment pada CDM, Sehingga kita definiskan saat

model telah menjadi PDM.

Untuk kali ini kita ubah primary key pada 3 tabel m_user, m_role, dan m_menu menjadi auto

increment.

Untuk tabel m_user, klik 2x pada tabel m_user kemudian klik pada tab Column. Pilih column dengan

atribut P (Primary) untuk tabel m_user columnnya adalah userid. setelah itu klik 2x lagi. Maka akan

muncul window baru untuk column properties, check identity seperti pada gambar berikut :

Page 33: Documentci

5. Lakukan proses yang sama seperti pada Task 3, No 4 untuk m_role dan m_menu.

Task 4 – Generate Script

Setelah PDM selesai kita akan memindahkan diagram tersebut ke database yang sesungguhnya yaitu

MySQL 5.0.

1. Untuk membuat script dari diagram tersebut adalah dengan klik pada menu Database -> Generate

Database. Sehingga tampil seperti pada diagram berikut :

2. Untuk penstandaran penamaan tabel, untuk training kali ini kita akan menggunakan “lowercase”

(huruf kecil), untuk pengaturannya dapat dilihat pada menu Format pada Database Generation.

Page 34: Documentci

3. Untuk melihat hasilnya dapat dilihat pada tab Preview, seperti pada gambar berikut :

4. Setelah itu klik OK.

5. Buka phpmyadmin pada alamat :

http://localhost/phpmyadmin/

6. Bila anda pertama kali install, atau tidak melakukan perubahan account sama sekali pada XAMPP

maka defaultnya username = “root”, dan password = “”

7. Klik pada tab Database , buat database baru dengan nama “training” seperti terlihat pada gambar

berikut :

Kemudian tekan tombol Create

8. Aktifkan database training, dengan klik pada menu sebelah kiri dengan nama “training” seperti pada

gambar berikut :

Page 35: Documentci

9. Masuk ke tab Import, kemudian browse file hasil output dari PDM tadi. Setelah itu klik “GO”.

Gambar terlihat seperti berikut :

Page 36: Documentci

10. Jika berhasil maka akan tampil output seperti berikut :

Task 5 – Intellisense Pada Netbeans & CodeIgniter

Tambahkan baris kode berikut agar netbeans dapat mengetahui atribut-atribut dari kelasnya

(menyalakan intellisense).

Buat file dengan nama helper.php pada folder training yang terletak paling luar dan isikan dengan baris

kode berikut :

helper.php

<?php

/**

* @property CI_DB_active_record $db

* @property CI_DB_forge $dbforge

* @property CI_Benchmark $benchmark

* @property CI_Calendar $calendar

* @property CI_Cart $cart

* @property CI_Config $config

* @property CI_Controller $controller

* @property CI_Email $email

* @property CI_Encrypt $encrypt

* @property CI_Exceptions $exceptions

* @property CI_Form_validation $form_validation

* @property CI_Ftp $ftp

* @property CI_Hooks $hooks

* @property CI_Image_lib $image_lib

* @property CI_Input $input

* @property CI_Language $language

* @property CI_Loader $load

* @property CI_Log $log

* @property CI_Model $model

* @property CI_Output $output

* @property CI_Pagination $pagination

Page 37: Documentci

* @property CI_Parser $parser

* @property CI_Profiler $profiler

* @property CI_Router $router

* @property CI_Session $session

* @property CI_Sha1 $sha1

* @property CI_Table $table

* @property CI_Trackback $trackback

* @property CI_Typography $typography

* @property CI_Unit_test $unit_test

* @property CI_Upload $upload

* @property CI_URI $uri

* @property CI_User_agent $user_agent

* @property CI_Validation $validation

* @property CI_Xmlrpc $xmlrpc

* @property CI_Xmlrpcs $xmlrpcs

* @property CI_Zip $zip

*/

class CI_Controller {};

/**

* @property CI_DB_active_record $db

* @property CI_DB_forge $dbforge

* @property CI_Config $config

* @property CI_Loader $load

* @property CI_Session $session

*/

class CI_Model {};

?>

Page 38: Documentci

BAB 4: Manajemen Controller

Pada kali ini lebih difokuskan untuk mengatur controller agar tidak melakukan coding berulang-ulang,

penerapan inheritance pada controller dan pengaturan menu.

Task 1 – Inhertiance Pada CodeIgniter Controller

1. Untuk menurunkan class CI_Controller, CodeIgniter memiliki aturan yang harus dipenuhi sebelum

kita melakukan penurunan class. Penurunan untuk core library CodeIgniter adalah dengan

menambahkan file pada direktori “application/core” dengan nama file diawali dengan prefik

tertentu sesuai dengan configurasi pada file application/config/config.php, seperti terlihat sebagai

berikut :

config.php

$config['subclass_prefix'] = 'MY_';

Sehingga nama file yang akan dibuat diawali dengan prefix “MY_”.

2. Buat file “MY_Controller.php” pada direktori “application/core” setelah itu isikan dengan kode

berikut untuk menurunkan dari class CI_Controller.

MY_Controller.php

<?php

class MY_Controller extends CI_Controller {

public function __construct() {

parent::__construct();

}

}

?>

3. Ubah file dashboard.php pada direktori “application/controller” yang sebelumnya extend dari class

CI_Controller menjadi MY_Controller.

dashboard.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class dashboard extends MY_Controller {

function index() {

$data['page'] = 'dashboard_view';

$this->load->view('container', $data);

}

}

?>

4. Saat ini kita telah menurunkan class CI_Controller, pastikan anda tetap dapat mengakses halaman

http://localhost/training/ tanpa error.

Page 39: Documentci

Task 2 – Menampilkan menu secara dinamis

1. Kita buat terlebih dahulu data sample menu, seperti terlihat sebagai berikut :

INSERT INTO `m_menu` (`menu_id`, `menu_name`, `menu_description`, `menu_active`) VALUES

(1, 'Dashboard', 'Dashboard', 1),

(2, 'Client', 'Client', 1),

(3, 'Product', 'Product', 1),

(4, 'User', 'User', 1);

2. Jalankan script tersebut pada phpmyadmin, dengan klik pada database training, kemudian pilih

menu SQL, setelah itu ketikkan kode tersebut pada text area query, kemudian tekan GO, seperti

pada gambar berikut :

3. Setelah itu kita buat class Model untuk pengaturan menu tersebut. Kita buat file dengan nama

menu_model.php pada direktori “application/models”.

menu_model.php

<?php

class Menu_model extends CI_Model {

function get_all_menu(){

$all_menu = $this->db->get('m_menu');

return $all_menu->result_object();

}

}

?>

Sintaks query diatas mungkin kurang familiar dipakai, sintaks seperti diatas dinamakan ActiveRecord

dengan tujuan untuk menyederhanakan penulisan kode untuk berinteraksi dengan database, dan

tentunya untuk dapat digunakan pada beberapa database (standarisasi penulisan sintaks). Untuk

lebih detilnya silahkan baca pada halaman : http://en.wikipedia.org/wiki/Active_record_pattern.

Page 40: Documentci

Untuk detil fungsi dan cara penggunaan model pada CodeIgniter silahkan baca pada halaman :

http://codeigniter.com/user_guide/general/models.html.

$this->db->get('m_menu');

Akan menghasilkan output query :

select * from m_menu

4. Setelah membuat model, maka kita akan integrasikan dengan file dashboard.php pada direktori

“application/controllers/”, sehingga file menjadi seperti berikut :

dashboard.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class dashboard extends MY_Controller {

function index() {

$this->load->model('Menu_model');

$this->menus = $this->Menu_model->get_all_menu();

$data['page'] = 'dashboard_view';

$this->load->view('container', $data);

}

}

?>

5. Setelah controller, kita akan mengubah view. Untuk itu buka file menu.php pada direktori

“application/views/part/”. Ubah script yang sebelumnya menjadi seperti berikut :

menu.php

<div class="nav-outer-repeat">

<!-- start nav-outer -->

<div class="nav-outer">

<!-- start nav-right -->

<div id="nav-right">

<div class="nav-divider">&nbsp;</div>

<div class="showhide-account active"><img width="93" height="14" alt="" src="<?php echo

base_url(); ?>assets/images/shared/nav/nav_myaccount.gif"></div>

<div class="nav-divider">&nbsp;</div>

<a id="logout" href=""><img width="64" height="14" alt="" src="<?php echo base_url();

?>assets/images/shared/nav/nav_logout.gif"></a>

<div class="clear">&nbsp;</div>

<!-- start account-content -->

Page 41: Documentci

<div class="account-content" style="display: none;">

<div class="account-drop-inner">

<a id="acc-settings" href="">Settings</a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-details" href="">Personal details </a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-project" href="">Project details</a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-inbox" href="">Inbox</a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-stats" href="">Statistics</a>

</div>

</div>

<!-- end account-content -->

</div>

<!-- end nav-right -->

<!-- start nav -->

<div class="nav">

<div class="table">

<?php foreach ($this->menus as $menu){ ?>

<ul class="select"><li><a href="#nogo"><b><?php echo $menu->menu_name; ?></b><!--[if

IE 7]><!--></a><!--<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]-->

<div class="select_sub">

<ul class="sub">

<li><a href="<?php echo site_url($menu->menu_name); ?>">View All <?php

echo $menu->menu_name; ?></a></li>

<li><a href="<?php echo site_url($menu->menu_name . "/insert");

?>">Add <?php echo $menu->menu_name; ?></a></li>

</ul>

</div>

<!--[if lte IE 6]></td></tr></table></a><![endif]-->

</li>

</ul>

<div class="nav-divider">&nbsp;</div>

<?php } ?>

<div class="clear"></div>

</div>

<div class="clear"></div>

</div>

<!-- start nav -->

Page 42: Documentci

</div>

<div class="clear"></div>

<!-- start nav-outer -->

</div>

<div class="clear"></div>

6. Akses halaman http://localhost/training/ maka menu akan berubah seperti berikut :

7. Ketika kita klik pada link View All User, maka akan tampil error seperti gambar berikut :

Karena kita belum membuat controller untuk meng-handle request uri :

http://localhost/training/index.php/User

Langkah selanjutnya kita coba untuk membuat controller untuk menu user, buat file dengan nama

user.php, pada direktori “application/controllers/” kemudian ketikkan kode berikut ini :

Page 43: Documentci

user.php

<?php

if (!defined('BASEPATH')) exit('No direct script access allowed');

class user extends MY_Controller {

function index () {

$this->load->model('Menu_model');

$this->menus = $this->Menu_model->get_all_menu();

$data['page'] = 'user_view';

$this->load->view('container', $data);

}

}

?>

Kemudian kita buat user_view.php pada direktori “application/views/” yang berisi template grid

dari tema yang telah kita download sebelumnya dengan nama file “table.html”.

user_view.php

<div id="content-outer">

<!-- start content -->

<div id="content">

<!-- start page-heading -->

<div id="page-heading">

<h1>Add product</h1>

</div>

<!-- end page-heading -->

<table border="0" width="100%" cellpadding="0" cellspacing="0" id="content-table">

<tr>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowleft.jpg" width="20" height="300" alt="" /></th>

<th class="topleft"></th>

<td id="tbl-border-top">&nbsp;</td>

<th class="topright"></th>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowright.jpg" width="20" height="300" alt="" /></th>

</tr>

<tr>

<td id="tbl-border-left"></td>

<td>

Page 44: Documentci

<!-- start content-table-inner

...................................................................... START -->

<div id="content-table-inner">

<!-- start table-content -->

<div id="table-content">

<!-- start product-table

..................................................................................... -->

<form id="mainform" action="">

<table border="0" width="100%" cellpadding="0" cellspacing="0"

id="product-table">

<tr>

<th class="table-header-check"><a id="toggle-all" ></a> </th>

<th class="table-header-repeat line-left minwidth-1"><a

href="">Last Name</a> </th>

<th class="table-header-repeat line-left minwidth-1"><a

href="">First Name</a></th>

<th class="table-header-repeat line-left"><a

href="">Email</a></th>

<th class="table-header-repeat line-left"><a

href="">Due</a></th>

<th class="table-header-repeat line-left"><a

href="">Website</a></th>

<th class="table-header-options line-left"><a

href="">Options</a></th>

</tr>

<tr>

<td><input type="checkbox"/></td>

<td>Sabev</td>

<td>George</td>

<td><a href="">[email protected]</a></td>

<td>R250</td>

<td><a href="">www.mainevent.co.za</a></td>

<td class="options-width">

<a href="" title="Edit" class="icon-1 info-tooltip"></a>

<a href="" title="Edit" class="icon-2 info-tooltip"></a>

<a href="" title="Edit" class="icon-3 info-tooltip"></a>

<a href="" title="Edit" class="icon-4 info-tooltip"></a>

<a href="" title="Edit" class="icon-5 info-tooltip"></a>

</td>

</tr>

<tr class="alternate-row">

<td><input type="checkbox"/></td>

<td>Sabev</td>

Page 45: Documentci

<td>George</td>

<td><a href="">[email protected]</a></td>

<td>R250</td>

<td><a href="">www.mainevent.co.za</a></td>

<td class="options-width">

<a href="" title="Edit" class="icon-1 info-tooltip"></a>

<a href="" title="Edit" class="icon-2 info-tooltip"></a>

<a href="" title="Edit" class="icon-3 info-tooltip"></a>

<a href="" title="Edit" class="icon-4 info-tooltip"></a>

<a href="" title="Edit" class="icon-5 info-tooltip"></a>

</td>

</tr>

<tr>

<td><input type="checkbox"/></td>

<td>Sabev</td>

<td>George</td>

<td><a href="">[email protected]</a></td>

<td>R250</td>

<td><a href="">www.mainevent.co.za</a></td>

<td class="options-width">

<a href="" title="Edit" class="icon-1 info-tooltip"></a>

<a href="" title="Edit" class="icon-2 info-tooltip"></a>

<a href="" title="Edit" class="icon-3 info-tooltip"></a>

<a href="" title="Edit" class="icon-4 info-tooltip"></a>

<a href="" title="Edit" class="icon-5 info-tooltip"></a>

</td>

</tr>

<tr class="alternate-row">

<td><input type="checkbox"/></td>

<td>Sabev</td>

<td>George</td>

<td><a href="">[email protected]</a></td>

<td>R250</td>

<td><a href="">www.mainevent.co.za</a></td>

<td class="options-width">

<a href="" title="Edit" class="icon-1 info-tooltip"></a>

<a href="" title="Edit" class="icon-2 info-tooltip"></a>

<a href="" title="Edit" class="icon-3 info-tooltip"></a>

<a href="" title="Edit" class="icon-4 info-tooltip"></a>

<a href="" title="Edit" class="icon-5 info-tooltip"></a>

</td>

</tr>

</table>

<!-- end product-table................................... -->

Page 46: Documentci

</form>

</div>

<!-- end content-table -->

<!-- start actions-box ............................................... -->

<div id="actions-box">

<a href="" class="action-slider"></a>

<div id="actions-box-slider">

<a href="" class="action-edit">Edit</a>

<a href="" class="action-delete">Delete</a>

</div>

<div class="clear"></div>

</div>

<!-- end actions-box........... -->

<!-- start paging..................................................... -->

<table border="0" cellpadding="0" cellspacing="0" id="paging-table">

<tr>

<td>

<a href="" class="page-far-left"></a>

<a href="" class="page-left"></a>

<div id="page-info">Page <strong>1</strong> / 15</div>

<a href="" class="page-right"></a>

<a href="" class="page-far-right"></a>

</td>

<td>

<select class="styledselect_pages">

<option value="">Number of rows</option>

<option value="">1</option>

<option value="">2</option>

<option value="">3</option>

</select>

</td>

</tr>

</table>

<!-- end paging................ -->

<div class="clear"></div>

</div>

<!-- end content-table-inner ............................................END -->

</td>

<td id="tbl-border-right"></td>

</tr>

Page 47: Documentci

<tr>

<th class="sized bottomleft"></th>

<td id="tbl-border-bottom">&nbsp;</td>

<th class="sized bottomright"></th>

</tr>

</table>

<div class="clear">&nbsp;</div>

</div>

<!-- end content -->

<div class="clear">&nbsp;</div>

</div>

<div class="clear">&nbsp;</div>

8. Klik link View All User pada http://localhost/training/, maka akan tampil seperti berikut :

9. Untuk saat ini tentunya ada beberapa kode yang selalu di tuliskan pada tiap-tiap halaman, yaitu

fungsi untuk mendapatkan semua halaman,

$this->load->model('Menu_model');

$this->menus = $this->Menu_model->get_all_menu();

Kita pindahkan kode-kode tersebut ke dalam MY_Controller class, sehingga kita tidak perlu menulis

pada tiap-tiap fungsi untuk mendapatkan menu.

Buka file “MY_Controller.php” pada direktori “application/core”. Tambahkan kode berikut :

Page 48: Documentci

MY_Controller.php

<?php

class MY_Controller extends CI_Controller {

public function __construct() {

parent::__construct();

$this->loadmenu();

}

private function loadmenu() {

$this->load->model('Menu_model');

$this->menus = $this->Menu_model->get_all_menu();

}

}

?>

Jangan lupa untuk menghapus baris kode berikut pada dashboard.php dan user.php

$this->load->model('Menu_model');

$this->menus = $this->Menu_model->get_all_menu();

Task 3 – Clean URL pada XAMPP web server

Alamat untuk mengakses menu adalah pada http://localhost/training/index.php/User/ kita bisa

hilangkan index.php dalam url tersebut dengan cara berikut :

1. Buka command prompt (cmd)

2. Masuk ke folder dimana CodeIgniter ter-install, misal pada komputer ada pada drive C, sehingga

kode akan terlihat sebagai berikut :

cd C:\xampp\htdocs\training

3. Buat file .htaccess pada folder tersebut dengan sintaks copy con

C:\xampp\htdocs\training>copy con .htaccess

4. Setelah itu klik [enter] layar akan blank, kemudian ketikkan kode berikut :

RewriteEngine On

RewriteBase /training/

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php/$1 [PT,L]

5. Klik [ctrl+z] maka akan muncul kode ^Z pada layar, kemudian tekan [enter] kembali.

6. Maka file .htaccess akan ada pada folder training, silahkan cek terlebih dahulu.

Page 49: Documentci

7. Konfigurasi selanjutnya adalah untuk apache, cari file httpd.conf misal xampp berada pada drive C:

C:\xampp\apache\conf\httpd.conf

8. Buka file tersebut dan cari sintaks seperti berikut :

#LoadModule rewrite_module modules/mod_rewrite.so

9. Hilangkan tanda (#) dan simpan perubahan, sehingga kode akan tampak sebagai berikut :

LoadModule rewrite_module modules/mod_rewrite.so

10. Buka file config.php pada direktori C:\xampp\htdocs\training\system\application\config.

11. Ubah kode

$config['index_page'] = "index.php";

Menjadi

$config['index_page'] = "";

12. Jangan lupa restart xampp untuk Apache module

13. Buka halaman berikut :

http://localhost/training/User/

bila tidak ada error maka telah berhasil menghilangkan index.php pada url.

Page 50: Documentci

BAB 5: Pengaturan Hak Akses

Pada bab ini akan dijelaskan bagaimana metode autentikasi yang sebaiknya dilakukan, tidak hanya

pembatasan pada hak masuk aplikasi, namun pembatasan pada tiap-tiap halaman.

Task 1 – Pembuatan Desain Halaman Login

1. Buat file controller dengan nama “login.php” pada direktori “application/controllers” isikan dengan

kode berikut :

login.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class login extends CI_Controller {

function index() {

$this->load->view('login_view');

}

}

?>

2. Buat file view dengan nama “login_view.php” pada direktori “application/controllers” isikan

dengan kode berikut :

login_view.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>Internet Dreams</title>

<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/screen.css" type="text/css"

media="screen" title="default" />

<!-- jquery core -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery-1.4.1.min.js"

type="text/javascript"></script>

<!-- Custom jquery scripts -->

<script src="<?php echo base_url(); ?>assets/js/jquery/custom_jquery.js"

type="text/javascript"></script>

<!-- MUST BE THE LAST SCRIPT IN <HEAD></HEAD></HEAD> png fix -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.pngFix.pack.js"

type="text/javascript"></script>

<script type="text/javascript">

Page 51: Documentci

$(document).ready(function(){

$(document).pngFix( );

});

</script>

</head>

<body id="login-bg">

<!-- Start: login-holder -->

<div id="login-holder">

<!-- start logo -->

<div id="logo-login">

<a href="index.html">

<img src="<?php echo base_url(); ?>assets/images/shared/logo.png" width="156"

height="40" alt="" />

</a>

</div>

<!-- end logo -->

<div class="clear"></div>

<!-- start loginbox ........... -->

<div id="loginbox">

<!-- start login-inner -->

<div id="login-inner">

<table border="0" cellpadding="0" cellspacing="0">

<tr>

<th>Username</th>

<td>

<input type="text" class="login-inp" />

</td>

</tr>

<tr>

<th>Password</th>

<td>

<input type="password" value="" onfocus="this.value=''" class="login-

inp" />

</td>

</tr>

<tr>

<th></th>

<td valign="top">

<input type="checkbox" class="checkbox-size" id="login-check" />

<label for="login-check">Remember me</label></td>

</tr>

<tr>

<th></th>

<td><input type="button" class="submit-login" /></td>

</tr>

Page 52: Documentci

</table>

</div>

<!-- end login-inner -->

<div class="clear"></div>

<a href="" class="forgot-pwd">Forgot Password?</a>

</div>

<!-- end loginbox -->

<!-- start forgotbox .................... -->

<div id="forgotbox">

<div id="forgotbox-text">Please send us your email and we'll reset your

password.</div>

<!-- start forgot-inner -->

<div id="forgot-inner">

<table border="0" cellpadding="0" cellspacing="0">

<tr>

<th>Email address:</th>

<td><input type="text" value="" class="login-inp" /></td>

</tr>

<tr>

<th></th>

<td><input type="button" class="submit-login" /></td>

</tr>

</table>

</div>

<!-- end forgot-inner -->

<div class="clear"></div>

<a href="" class="back-login">Back to login</a>

</div>

<!-- end forgotbox -->

</div>

<!-- End: login-holder -->

</body>

</html>

Untuk saat ini kita masih gunakan script statis, halaman hanya untuk display saja. Untuk mekanisme

login akan dibahas pada Task selanjutnya.

3. Saat kita akses halaman http://localhost/training/login/ maka output pada browser akan terlihat

seperti berikut :

Page 53: Documentci

Task 2 – Redirect ke halaman login

Saat kita mengakses halaman http://localhost/training/ halaman utama dapat tampil tanpa ada

mekanisme login. Kita ubah menjadi halaman dashboard hanya boleh diakses oleh user yang telah login

saja, bagi yang belum akan di-arahkan ke halaman login.

1. Tambahkan baris kode ke dalam file “MY_Controller.php” pada direktori “application/core” untuk

pengecekan user melalui session, sehingga baris kode menjadi seperti berikut :

MY_Controller.php

<?php

class MY_Controller extends CI_Controller {

public function __construct() {

parent::__construct();

$this->checkauth();

$this->loadmenu();

}

private function loadmenu() {

$this->load->model('Menu_model');

$this->menus = $this->Menu_model->get_all_menu();

}

private function checkauth() {

if (!$this->session->userdata('is_login')) {

redirect('/login', 'refresh');

}

}

}

Page 54: Documentci

?>

2. Coba kembali mengakses halaman pada alamat url http://localhost/training/, maka kita akan di

alihkan (redirect) ke halaman login. Saat ini kita telah berhasil memproteksi halaman-halaman

backend yang telah kita buat.

Task 3 – Mekanisme Login

1. Sebelum kita mulai untuk membuat mekanisme login, yang pertama adalah menambahkan data

user dan role terlebih dahulu untuk mencoba.

INSERT INTO `training`.`m_role` (`role_id`, `role_name`, `role_description`) VALUES (1, 'admin',

'admin');

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (1, 1, 'admin', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

Kita melakukan hashing dengan metode sha1 untuk password, sebelum di hash passwordnya adalah

“123456”.

2. Kita buat dulu model yang digunakan untuk pengecekan user pada database, kita buat file dengan

nama “user_model.php” pada direktori “application/models”. Isikan dengan kode berikut :

user_model.php

<?php

class User_model extends CI_Model {

function login($username, $password){

$this->db->select('*');

$this->db->from('m_user');

$this->db->where('user_name', $username);

$this->db->where('user_password', sha1($password));

$this->db->where('user_active', 1);

$objUsers = $this->db->get()->result_object();

if (count($objUsers) == 1){

return $objUsers[0];

}

else{

return FALSE;

}

}

}

?>

Page 55: Documentci

3. Setelah itu buka file “login.php” pada direktori “application/controllers” ubah kode menjadi seperti

berikut :

login.php

<?php

if (!defined('BASEPATH'))

exit('No direct script access allowed');

class login extends CI_Controller {

function index() {

$this->load->view('login_view');

}

function dologin() {

$username = $this->input->post('username');

$password = $this->input->post('password');

$this->load->model('User_model');

$result = $this->User_model->login($username, $password);

//Login Success

if ($result != FALSE) {

$arrSession = array(

'userid' => $result->userid,

'user_name' => $result->user_name,

'role_id' => $result->role_id,

'is_login' => TRUE

);

//Save session

$this->session->set_userdata($arrSession);

//Main page

redirect('/');

}

//Login Failed

else {

//Login Page

redirect('/login');

}

}

function logout() {

//Destroy Session

$this->session->sess_destroy();

//Login Page

redirect('/login');

}

}

Page 56: Documentci

?>

4. Setelah it kita perlu update pula file template “login_view.php” pada direktori “application/views”

agar sesuai dengan controller yang telah kita buat.

Buka file “login_view.php” ubah menjadi seperti berikut :

login_view.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>Internet Dreams</title>

<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/screen.css" type="text/css"

media="screen" title="default" />

<!-- jquery core -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery-1.4.1.min.js"

type="text/javascript"></script>

<!-- Custom jquery scripts -->

<script src="<?php echo base_url(); ?>assets/js/jquery/custom_jquery.js"

type="text/javascript"></script>

<!-- MUST BE THE LAST SCRIPT IN <HEAD></HEAD></HEAD> png fix -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.pngFix.pack.js"

type="text/javascript"></script>

<script type="text/javascript">

$(document).ready(function(){

$(document).pngFix( );

});

</script>

</head>

<body id="login-bg">

<!-- Start: login-holder -->

<div id="login-holder">

<!-- start logo -->

<div id="logo-login">

<a href="index.html">

<img src="<?php echo base_url(); ?>assets/images/shared/logo.png" width="156"

height="40" alt="" />

</a>

</div>

<!-- end logo -->

<div class="clear"></div>

<!-- start loginbox ........... -->

Page 57: Documentci

<div id="loginbox">

<!-- start login-inner -->

<div id="login-inner">

<form action="<?php echo base_url(); ?>/login/dologin/" method="POST">

<table border="0" cellpadding="0" cellspacing="0">

<tr>

<th>Username</th>

<td>

<input type="text" name="username" class="login-inp" />

</td>

</tr>

<tr>

<th>Password</th>

<td>

<input type="password" name="password" value=""

onfocus="this.value=''" class="login-inp" />

</td>

</tr>

<tr>

<th></th>

<td valign="top">

<input type="checkbox" class="checkbox-size" id="login-check" />

<label for="login-check">Remember me</label></td>

</tr>

<tr>

<th></th>

<td><input type="submit" class="submit-login" /></td>

</tr>

</table>

</form>

</div>

<!-- end login-inner -->

<div class="clear"></div>

<a href="" class="forgot-pwd">Forgot Password?</a>

</div>

<!-- end loginbox -->

<!-- start forgotbox .................... -->

<div id="forgotbox">

<div id="forgotbox-text">Please send us your email and we'll reset your

password.</div>

<!-- start forgot-inner -->

<div id="forgot-inner">

<table border="0" cellpadding="0" cellspacing="0">

<tr>

<th>Email address:</th>

Page 58: Documentci

<td><input type="text" value="" class="login-inp" /></td>

</tr>

<tr>

<th></th>

<td><input type="button" class="submit-login" /></td>

</tr>

</table>

</div>

<!-- end forgot-inner -->

<div class="clear"></div>

<a href="" class="back-login">Back to login</a>

</div>

<!-- end forgotbox -->

</div>

<!-- End: login-holder -->

</body>

</html>

5. Setelah itu coba masuk ke halaman login http://localhost/training/login/, coba dengan username

dan password yang salah. Misal username = “admin” password = “admin”.

Maka form akan tetap di halaman login, namun user tidak mendapatkan notifikasi apapun atas

gagalnya masuk ke sistem, maka kita akan tambahkan notifikasi kegagalan.

6. Buka kembali “login.php” pada direktori “application/controllers”, ubah kode agar terlihat seperti

berikut :

login.php

<?php

if (!defined('BASEPATH')) exit('No direct script access allowed');

class login extends CI_Controller {

function index() {

$data = array();

$error = $this->session->flashdata('error');

$data['error'] = $error;

$this->load->view('login_view', $data);

}

function dologin() {

$username = $this->input->post('username');

$password = $this->input->post('password');

$this->load->model('User_model');

$result = $this->User_model->login($username, $password);

Page 59: Documentci

//Login Success

if ($result != FALSE) {

$arrSession = array(

'userid' => $result->userid,

'user_name' => $result->user_name,

'role_id' => $result->role_id,

'is_login' => TRUE

);

//Save session

$this->session->set_userdata($arrSession);

//Main page

redirect('/');

}

//Login Failed

else {

$this->session->set_flashdata(

'error',

'Invalid Username / Password.'

);

//Login Page

redirect('/login');

}

}

function logout() {

//Destroy Session

$this->session->sess_destroy();

//Login Page

redirect('/login');

}

}

?>

7. Dan ubah pula halaman “login_view.php” pada direktori “application/views”, ubah kode agar dapat

menampilkan error dari server :

login_view.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>Internet Dreams</title>

<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/screen.css" type="text/css"

media="screen" title="default" />

<!-- jquery core -->

Page 60: Documentci

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery-1.4.1.min.js"

type="text/javascript"></script>

<!-- Custom jquery scripts -->

<script src="<?php echo base_url(); ?>assets/js/jquery/custom_jquery.js"

type="text/javascript"></script>

<!-- MUST BE THE LAST SCRIPT IN <HEAD></HEAD></HEAD> png fix -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.pngFix.pack.js"

type="text/javascript"></script>

<script type="text/javascript">

$(document).ready(function(){

$(document).pngFix( );

});

</script>

</head>

<body id="login-bg">

<!-- Start: login-holder -->

<div id="login-holder">

<!-- start logo -->

<div id="logo-login">

<a href="index.html">

<img src="<?php echo base_url(); ?>assets/images/shared/logo.png" width="156"

height="40" alt="" />

</a>

</div>

<!-- end logo -->

<div class="clear"></div>

<!-- start loginbox ........... -->

<div id="loginbox">

<!-- start login-inner -->

<div id="login-inner">

<form action="<?php echo base_url(); ?>/login/dologin/" method="POST">

<table border="0" cellpadding="0" cellspacing="0">

<tr>

<th>Username</th>

<td>

<input type="text" name="username" class="login-inp" />

</td>

</tr>

<tr>

<th>Password</th>

<td>

Page 61: Documentci

<input type="password" name="password" value=""

onfocus="this.value=''" class="login-inp" />

</td>

</tr>

<tr>

<th></th>

<td valign="top">

<input type="checkbox" class="checkbox-size" id="login-check" />

<label for="login-check">Remember me</label></td>

</tr>

<tr>

<th></th>

<td style="height:20px;color:#FF6600;">

<?php if ($error) {

echo $error;

}

?>

</td>

</tr>

<tr>

<th></th>

<td><input type="submit" class="submit-login" /></td>

</tr>

</table>

</form>

</div>

<!-- end login-inner -->

<div class="clear"></div>

<a href="" class="forgot-pwd">Forgot Password?</a>

</div>

<!-- end loginbox -->

<!-- start forgotbox .................... -->

<div id="forgotbox">

<div id="forgotbox-text">Please send us your email and we'll reset your

password.</div>

<!-- start forgot-inner -->

<div id="forgot-inner">

<table border="0" cellpadding="0" cellspacing="0">

<tr>

<th>Email address:</th>

<td><input type="text" value="" class="login-inp" /></td>

</tr>

<tr>

<th></th>

<td><input type="button" class="submit-login" /></td>

</tr>

Page 62: Documentci

</table>

</div>

<!-- end forgot-inner -->

<div class="clear"></div>

<a href="" class="back-login">Back to login</a>

</div>

<!-- end forgotbox -->

</div>

<!-- End: login-holder -->

</body>

</html>

8. Sehingga bila username / password tidak sesuai maka akan tampil seperti berikut :

9. Setelah itu silahkan coba untuk memasukkan username & password yang benar

username : admin

password : 123456

10. Langkah selanjutnya kita akan menambahkan fungsi logout pada halaman tersebut pada link

“logout”.

11. Buka file “menu.php” pada “application/views/part” tambahkan link ke controller logout seperti

terlihat pada kode berikut :

menu.php

<div class="nav-outer-repeat">

<!-- start nav-outer -->

<div class="nav-outer">

<!-- start nav-right -->

<div id="nav-right">

<div class="nav-divider">&nbsp;</div>

Page 63: Documentci

<div class="showhide-account active"><img width="93" height="14" alt="" src="<?php echo

base_url(); ?>assets/images/shared/nav/nav_myaccount.gif"></div>

<div class="nav-divider">&nbsp;</div>

<a id="logout" href="<?php echo base_url(); ?>/login/logout/"><img width="64" height="14"

alt="" src="<?php echo base_url(); ?>assets/images/shared/nav/nav_logout.gif"></a>

<div class="clear">&nbsp;</div>

<!-- start account-content -->

<div class="account-content" style="display: none;">

<div class="account-drop-inner">

<a id="acc-settings" href="">Settings</a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-details" href="">Personal details </a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-project" href="">Project details</a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-inbox" href="">Inbox</a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-stats" href="">Statistics</a>

</div>

</div>

<!-- end account-content -->

</div>

<!-- end nav-right -->

<!-- start nav -->

<div class="nav">

<div class="table">

<?php foreach ($this->menus as $menu){ ?>

<ul class="select"><li><a href="#nogo"><b><?php echo $menu->menu_name; ?></b><!--[if

IE 7]><!--></a><!--<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]-->

<div class="select_sub">

<ul class="sub">

<li><a href="<?php echo site_url($menu->menu_name); ?>">View All <?php

echo $menu->menu_name; ?></a></li>

<li><a href="<?php echo site_url($menu->menu_name . "/insert");

?>">Add <?php echo $menu->menu_name; ?></a></li>

</ul>

</div>

<!--[if lte IE 6]></td></tr></table></a><![endif]-->

</li>

</ul>

<div class="nav-divider">&nbsp;</div>

Page 64: Documentci

<?php } ?>

<div class="clear"></div>

</div>

<div class="clear"></div>

</div>

<!-- start nav -->

</div>

<div class="clear"></div>

<!-- start nav-outer -->

</div>

<div class="clear"></div>

Task 4 – Pembatasan Hak Akses (menu)

Setelah kita dapat mengatur hak akses secara umum langkah selanjutnya adalah pengaturan yang lebih

spesifik, yaitu pengaturan tiap modul.

1. Sebelum memulai kita definisikan terlebih dahulu menu apa saja yang dapat dibuka oleh admin dan

user.

Admin :

- Dashboard

- Client

- Product

- User

User

- Client

- Product

2. Jalankan script berikut untuk menambahkan user dan setting halaman terhadap role.

INSERT INTO `training`.`m_role` (`role_id`, `role_name`, `role_description`) VALUES (2, 'user',

'user');

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (2, 2, 'willy', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (3, 2, 'devi', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_role2menu` (`menu_id`, `role_id`) VALUES (1, 1);

INSERT INTO `training`.`m_role2menu` (`menu_id`, `role_id`) VALUES (2, 1);

INSERT INTO `training`.`m_role2menu` (`menu_id`, `role_id`) VALUES (3, 1);

INSERT INTO `training`.`m_role2menu` (`menu_id`, `role_id`) VALUES (4, 1);

Page 65: Documentci

INSERT INTO `training`.`m_role2menu` (`menu_id`, `role_id`) VALUES (2, 2);

INSERT INTO `training`.`m_role2menu` (`menu_id`, `role_id`) VALUES (3, 2);

Saat ini sudah ada 3 user, yaitu : admin, willy, devi. admin memiliki role admin, sedangkan willy

dan devi memiliki role user.

3. Langkah selanjutnya adalah dengan mengubah query sesuai dengan role yang dimiliki oleh user,

yang sebelumnya telah disimpan pada session.

Buka file “menu_model.php” pada direktori “application/models” tambahkan kode berikut untuk

filter menu berdasarkan user :

menu_model.php

<?php

class Menu_model extends CI_Model {

function get_all_menu(){

$all_menu = $this->db->get('m_menu');

return $all_menu->result_object();

}

function get_menu_by_role($role_id){

$this->db->select('*');

$this->db->from('m_menu');

$this->db->join('m_role2menu', 'm_menu.menu_id = m_role2menu.menu_id');

$this->db->where('m_role2menu.role_id', $role_id);

$all_menu = $this->db->get();

return $all_menu->result_object();

}

}

?>

4. Ubah pula class MY_Controller pada file “MY_Controller.php” yang terletak pada direktori

“application/core/” yang sebelumnya memanggil fungsi get_all_menu menjadi get_menu_by_role.

Baris kode terlihat seperti berikut :

MY_Controller.php

<?php

class MY_Controller extends CI_Controller {

public function __construct() {

parent::__construct();

Page 66: Documentci

$this->checkauth();

$this->loadmenu();

}

private function loadmenu() {

$this->load->model('Menu_model');

$role_id = $this->session->userdata('role_id');

$this->menus = $this->Menu_model->get_menu_by_role($role_id);

}

private function checkauth() {

if (!$this->session->userdata('is_login')) {

redirect('/login', 'refresh');

}

}

}

?>

5. Coba login menggunakan user “willy” dengan password “123456” maka menu akan berbeda dengan

user “admin”.

6. Pembatasan menu saja belum cukup untuk keamanan data, setelah login dengan user “willy”

silahkan untuk mengakses alamat url http://localhost/training/User maka akan tetap dapat dibuka,

maka langkah selanjutnya adalah memproteksi halaman tersebut.

7. Buka kembali MY_Controller.php, tambahkan kode sehingga menjadi seperti berikut :

MY_Controller.php

<?php

class MY_Controller extends CI_Controller {

public function __construct() {

parent::__construct();

$this->checkauth();

$this->loadmenu();

}

private function loadmenu() {

$this->load->model('Menu_model');

$role_id = $this->session->userdata('role_id');

$this->menus = $this->Menu_model->get_menu_by_role($role_id);

//http://localhost/training/User/insert

//segment 1 : User

//segement 2 : insert

$module = $this->uri->segment(1);

Page 67: Documentci

//Check apakah User ada pada menu

$find = false;

foreach($this->menus as $menu){

if (strtolower($menu->menu_name) == strtolower($module)){

$find = true;

}

}

//Bila tidak ada dan modul bukan halaman utama

if (!$find && $module != ''){

redirect('/');

}

}

private function checkauth() {

if (!$this->session->userdata('is_login')) {

redirect('/login', 'refresh');

}

}

}

?>

8. Login dengan user “willy” silahkan untuk mengakses alamat url http://localhost/training/User maka

akan di-redirect ke halaman utama.

Page 68: Documentci

BAB 6: CRUD

Bab ini difokuskan untuk membuat modul dengan fungsi “create”, “read”, “update” dan “delete”,

dengan komponen Grid dan Form yang akan kita buat sendiri.

Task 1 – Menampilkan Data

1. Sebelum memulai silahkan masukkan data user terlebih dahulu sebanyak 15 data, untuk menguji

sistem. Berikut adalah script yang di gunakan untuk insert data ke database :

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (4, 2, 'agus', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (5, 2, 'ekobudi', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (6, 2, 'fuadhasan', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (7, 2, 'dhadang', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (8, 2, 'hendro', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (9, 2, 'robicahyadi', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (10, 2, 'ekapras', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (11, 2, 'anangtj', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (12, 2, 'suhadi', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (13, 2, 'iwanfals', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (14, 2, 'hendrawan', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`)

VALUES (15, 2, 'pokemon', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

Jalankan script tersebut pada phpmyadmin, pada tab sql.

2. Langkah selanjutnya adalah membuat function untuk mengambil data seluruh user dari database,

untuk itu ubah “user_model.php” pada direktori “application/models/, menjadi seperti berikut :

user_model.php

<?php

class User_model extends CI_Model {

function login($username, $password){

$this->db->select('*');

Page 69: Documentci

$this->db->from('m_user');

$this->db->where('user_name', $username);

$this->db->where('user_password', sha1($password));

$this->db->where('user_active', 1);

$objUsers = $this->db->get()->result_object();

if (count($objUsers) == 1){

return $objUsers[0];

}

else{

return FALSE;

}

}

function get_all_user(){

$this->db->select('*');

$this->db->from('m_user');

$this->db->join('m_role','m_user.role_id = m_role.role_id');

$objUsers = $this->db->get()->result_object();

return $objUsers;

}

}

?>

3. Setelah itu kita ubah controller “user.php” pada direktori “application/controllers”menjadi seperti

berikut :

user.php

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class user extends MY_Controller {

function index() {

$data['page'] = 'user_view';

//Load Users from model

$this->load->model('User_model');

$allUsers = $this->User_model->get_all_user();

$data['users'] = $allUsers;

$this->load->view('container', $data);

}

}

?>

Page 70: Documentci

4. Setelah selesai langkah terakhir tentunya mengubah view, berikut adalah view yang telah kita ubah

pada file “user_view.php” pada direktori “application/views”.

user_view.php

<div id="content-outer">

<!-- start content -->

<div id="content">

<!-- start page-heading -->

<div id="page-heading">

<h1>Add product</h1>

</div>

<!-- end page-heading -->

<table border="0" width="100%" cellpadding="0" cellspacing="0" id="content-table">

<tr>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowleft.jpg" width="20" height="300" alt="" /></th>

<th class="topleft"></th>

<td id="tbl-border-top">&nbsp;</td>

<th class="topright"></th>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowright.jpg" width="20" height="300" alt="" /></th>

</tr>

<tr>

<td id="tbl-border-left"></td>

<td>

<!-- start content-table-inner

...................................................................... START -->

<div id="content-table-inner">

<!-- start table-content -->

<div id="table-content">

<!-- start product-table

..................................................................................... -->

<form id="mainform" action="">

<table border="0" width="100%" cellpadding="0" cellspacing="0"

id="product-table">

<tr>

<th class="table-header-check"><a id="toggle-all" ></a> </th>

<th class="table-header-repeat line-left minwidth-1"><a

href="">Username</a></th>

<th class="table-header-repeat line-left minwidth-1"><a

href="">Role</a></th>

<th class="table-header-repeat line-left"><a

href="">Active</a></th>

Page 71: Documentci

<th class="table-header-options line-left"><a

href="">Options</a></th>

</tr>

<?php $i = 0; ?>

<?php foreach ($users as $user) : ?>

<?php if ($i % 2 == 0): ?>

<tr class="alternate-row">

<?php else : ?>

<tr>

<?php endif; ?>

<td><input type="checkbox"/></td>

<td><?php echo $user->user_name; ?></td>

<td><?php echo $user->role_name; ?></td>

<td><?php echo $user->user_active == 1 ? "Active" :

"Not Active"; ?></td>

<td class="options-width">

<a href="<?php echo base_url() . $this->uri-

>segment(1); ?>/edit/<?php echo $user->userid; ?>" title="Edit" class="icon-1 info-tooltip"></a>

<a href="<?php echo base_url() . $this->uri-

>segment(1); ?>/delete/<?php echo $user->userid; ?>" title="Delete" class="icon-2 info-tooltip"></a>

</td>

</tr>

<?php $i++; ?>

<?php endforeach; ?>

</table>

<!-- end product-table................................... -->

</form>

</div>

<!-- end content-table -->

<!-- start actions-box ............................................... -->

<div id="actions-box">

<a href="" class="action-slider"></a>

<div id="actions-box-slider">

<a href="" class="action-edit">Edit</a>

<a href="" class="action-delete">Delete</a>

</div>

<div class="clear"></div>

</div>

<!-- end actions-box........... -->

<!-- start paging..................................................... -->

<table border="0" cellpadding="0" cellspacing="0" id="paging-table">

<tr>

<td>

<a href="" class="page-far-left"></a>

<a href="" class="page-left"></a>

Page 72: Documentci

<div id="page-info">Page <strong>1</strong> / 15</div>

<a href="" class="page-right"></a>

<a href="" class="page-far-right"></a>

</td>

<td>

<select class="styledselect_pages">

<option value="">Number of rows</option>

<option value="">1</option>

<option value="">2</option>

<option value="">3</option>

</select>

</td>

</tr>

</table>

<!-- end paging................ -->

<div class="clear"></div>

</div>

<!-- end content-table-inner ............................................END -->

</td>

<td id="tbl-border-right"></td>

</tr>

<tr>

<th class="sized bottomleft"></th>

<td id="tbl-border-bottom">&nbsp;</td>

<th class="sized bottomright"></th>

</tr>

</table>

<div class="clear">&nbsp;</div>

</div>

<!-- end content -->

<div class="clear">&nbsp;</div>

</div>

<div class="clear">&nbsp;</div>

5. Buka halaman http://localhost/training/User maka output akan terlihat seperti gambar berikut :

Page 73: Documentci

Task 2 – Menambahkan Fitur Pagging

Pada hasil sebelumnya semua data ditampilkan, langkah selanjutnya adalah menambahkan fitur pagging

(pemisahan halaman).

1. Karena pagging tidak dapat dilakukan pada segmen 1, maka kita perlu ubah pada file ‘menu.php’,

pada direktori ‘application/views/part/’.

menu.php

<div class="nav-outer-repeat">

<!-- start nav-outer -->

<div class="nav-outer">

<!-- start nav-right -->

<div id="nav-right">

<div class="nav-divider">&nbsp;</div>

<div class="showhide-account active"><img width="93" height="14" alt="" src="<?php echo

base_url(); ?>assets/images/shared/nav/nav_myaccount.gif"></div>

<div class="nav-divider">&nbsp;</div>

<a id="logout" href="<?php echo base_url(); ?>/login/logout/"><img width="64" height="14"

alt="" src="<?php echo base_url(); ?>assets/images/shared/nav/nav_logout.gif"></a>

<div class="clear">&nbsp;</div>

<!-- start account-content -->

<div class="account-content" style="display: none;">

<div class="account-drop-inner">

<a id="acc-settings" href="">Settings</a>

Page 74: Documentci

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-details" href="">Personal details </a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-project" href="">Project details</a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-inbox" href="">Inbox</a>

<div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-stats" href="">Statistics</a>

</div>

</div>

<!-- end account-content -->

</div>

<!-- end nav-right -->

<!-- start nav -->

<div class="nav">

<div class="table">

<?php foreach ($this->menus as $menu){ ?>

<ul class="select"><li><a href="#nogo"><b><?php echo $menu->menu_name; ?></b><!--[if

IE 7]><!--></a><!--<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]-->

<div class="select_sub">

<ul class="sub">

<li><a href="<?php echo site_url($menu->menu_name . "/grid"); ?>">View

All <?php echo $menu->menu_name; ?></a></li>

<li><a href="<?php echo site_url($menu->menu_name . "/insert");

?>">Add <?php echo $menu->menu_name; ?></a></li>

</ul>

</div>

<!--[if lte IE 6]></td></tr></table></a><![endif]-->

</li>

</ul>

<div class="nav-divider">&nbsp;</div>

<?php } ?>

<div class="clear"></div>

</div>

<div class="clear"></div>

</div>

<!-- start nav -->

</div>

<div class="clear"></div>

<!-- start nav-outer -->

</div>

<div class="clear"></div>

Page 75: Documentci

Sehingga untuk link yang sebelumnya adalah http://localhost/training/User/ menjadi

http://localhost/training/User/grid.

2. Setelah itu kita tambahkan fungsi pada file user_model.php untuk mendapatkan total record

sebelum di limit dan fungsi untuk mendapatkan record yang sudah di limit itu sendiri.

user_model.php

<?php

class User_model extends CI_Model {

function login($username, $password){

$this->db->select('*');

$this->db->from('m_user');

$this->db->where('user_name', $username);

$this->db->where('user_password', sha1($password));

$this->db->where('user_active', 1);

$objUsers = $this->db->get()->result_object();

if (count($objUsers) == 1){

return $objUsers[0];

}

else{

return FALSE;

}

}

function get_all_user(){

$this->db->select('*');

$this->db->from('m_user');

$this->db->join('m_role','m_user.role_id = m_role.role_id');

$objUsers = $this->db->get()->result_object();

return $objUsers;

}

//Mendapatkan jumlah record dari user

function get_count_user(){

return $this->db->count_all_results('m_user');

}

//Mendapatkan data user dengan limit

function get_user_use_limit($limit, $offset){

$this->db->select('*');

Page 76: Documentci

$this->db->from('m_user');

$this->db->join('m_role','m_user.role_id = m_role.role_id');

$this->db->limit($limit, $offset);

$objUsers = $this->db->get()->result_object();

return $objUsers;

}

}

?>

3. Setelah model tentunya kita ubah pula controller, buka file “user.php” pada direktori

“application/controllers/”. Berikut adalah baris kode user.php setelah kita tambahkan modul

pagging.

user.php

<?php

if (!defined('BASEPATH'))

exit('No direct script access allowed');

class user extends MY_Controller {

function grid() {

$data['page'] = 'user_view';

//Load Users from model

$this->load->model('User_model');

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

$config['base_url'] = base_url() . $this->uri->segment(1) . '/' . 'grid/';

$config['total_rows'] = $this->User_model->get_count_user();

$config['per_page'] = 5;

$offset = $this->uri->segment(3);

$offset = ( ! is_numeric($offset) || $offset < 1) ? 0 : $offset;

$allUsers = $this->User_model->get_user_use_limit($config['per_page'], $offset);

$data['users'] = $allUsers;

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

$this->load->view('container', $data);

}

}

?>

Page 77: Documentci

4. Untuk “user_view.php” pada direktori “application/views/” kita ubah menjadi seperti berikut :

user_view.php

<div id="content-outer">

<!-- start content -->

<div id="content">

<!-- start page-heading -->

<div id="page-heading">

<h1>Add product</h1>

</div>

<!-- end page-heading -->

<table border="0" width="100%" cellpadding="0" cellspacing="0" id="content-table">

<tr>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowleft.jpg" width="20" height="300" alt="" /></th>

<th class="topleft"></th>

<td id="tbl-border-top">&nbsp;</td>

<th class="topright"></th>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowright.jpg" width="20" height="300" alt="" /></th>

</tr>

<tr>

<td id="tbl-border-left"></td>

<td>

<!-- start content-table-inner

...................................................................... START -->

<div id="content-table-inner">

<!-- start table-content -->

<div id="table-content">

<!-- start product-table

..................................................................................... -->

<form id="mainform" action="">

<table border="0" width="100%" cellpadding="0" cellspacing="0"

id="product-table">

<tr>

<th class="table-header-check"><a id="toggle-all" ></a> </th>

<th class="table-header-repeat line-left minwidth-1"><a

href="">Username</a></th>

<th class="table-header-repeat line-left minwidth-1"><a

href="">Role</a></th>

<th class="table-header-repeat line-left"><a

href="">Active</a></th>

<th class="table-header-options line-left"><a

href="">Options</a></th>

Page 78: Documentci

</tr>

<?php $i = 0; ?>

<?php foreach ($users as $user) : ?>

<?php if ($i % 2 == 0): ?>

<tr class="alternate-row">

<?php else : ?>

<tr>

<?php endif; ?>

<td><input type="checkbox"/></td>

<td><?php echo $user->user_name; ?></td>

<td><?php echo $user->role_name; ?></td>

<td><?php echo $user->user_active == 1 ? "Active" :

"Not Active"; ?></td>

<td class="options-width">

<a href="<?php echo base_url() . $this->uri-

>segment(1); ?>/edit/<?php echo $user->userid; ?>" title="Edit" class="icon-1 info-tooltip"></a>

<a href="<?php echo base_url() . $this->uri-

>segment(1); ?>/delete/<?php echo $user->userid; ?>" title="Delete" class="icon-2 info-tooltip"></a>

</td>

</tr>

<?php $i++; ?>

<?php endforeach; ?>

</table>

<!-- end product-table...................................

-->

</form>

</div>

<!-- end content-table -->

<!-- start actions-box

............................................... -->

<div id="actions-box">

<a href="" class="action-slider"></a>

<div id="actions-box-slider">

<a href="" class="action-edit">Edit</a>

<a href="" class="action-delete">Delete</a>

</div>

<div class="clear"></div>

</div>

<!-- end actions-box........... -->

<!-- start

paging..................................................... -->

<div class="paging-property">

<?php echo $this->pagination->create_links(); ?>

</div>

Page 79: Documentci

<!-- end paging................ -->

<div class="clear"></div>

</div>

<!-- end content-table-inner ............................................END -->

</td>

<td id="tbl-border-right"></td>

</tr>

<tr>

<th class="sized bottomleft"></th>

<td id="tbl-border-bottom">&nbsp;</td>

<th class="sized bottomright"></th>

</tr>

</table>

<div class="clear">&nbsp;</div>

</div>

<!-- end content -->

<div class="clear">&nbsp;</div>

</div>

<div class="clear">&nbsp;</div>

5. Karena style pagging berbeda struktur dengan template yang kita download, maka kita akan

tambahkan sendiri css (style) untuk pagging. Buka file “screen.css” pada direktory “assets/css/” dan

tambahkan baris berikut :

screen.css

/* CUSTOM PAGING FOR CODEIGNITER */

.paging-property{

float: right;

margin: 0 8px 0 0;

}

.paging-property a, .paging-property strong{

height: 24px;

padding: 4px;

padding-right: 6px;

padding-left: 6px;

border:1px solid #999;

text-decoration:none;

background:#FFFFFF;

color:#000;

}

.paging-property a:hover{

background:#D2D2D2;

color:white;

}

.paging-property strong{

background: #D2D2D2;

}

Page 80: Documentci

6. Buka halaman http://localhost/training/User/grid maka output akan terlihat seperti berikut :

Task 3 – Insert Data

1. Untuk proses insert kita coba untuk klik dulu pada menu User -> Add User maka akan diarahkan ke

halaman http://localhost/training/User/insert, dan hasilnya adalah error 404, page not found. Maka

kita buat terlebih dahulu form view untuk halaman insert.

Buat file “user_insert.php” pada direktori “application/views/”, isikan dengan kode berikut :

user_insert.php

<!-- start content-outer -->

<div id="content-outer">

<!-- start content -->

<div id="content">

<div id="page-heading"><h1>Add product</h1></div>

<table border="0" width="100%" cellpadding="0" cellspacing="0" id="content-table">

<tr>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowleft.jpg" width="20" height="300" alt="" /></th>

<th class="topleft"></th>

<td id="tbl-border-top">&nbsp;</td>

<th class="topright"></th>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowright.jpg" width="20" height="300" alt="" /></th>

</tr>

Page 81: Documentci

<tr>

<td id="tbl-border-left"></td>

<td>

<!-- start content-table-inner -->

<div id="content-table-inner">

<table border="0" width="100%" cellpadding="0" cellspacing="0">

<tr valign="top">

<td>

<!-- start step-holder -->

<div id="step-holder">

<div class="step-no">1</div>

<div class="step-dark-left"><a href="">Add product

details</a></div>

<div class="step-dark-right">&nbsp;</div>

<div class="step-no-off">2</div>

<div class="step-light-left">Select related products</div>

<div class="step-light-right">&nbsp;</div>

<div class="step-no-off">3</div>

<div class="step-light-left">Preview</div>

<div class="step-light-round">&nbsp;</div>

<div class="clear"></div>

</div>

<!-- end step-holder -->

<!-- start id-form -->

<table border="0" cellpadding="0" cellspacing="0" id="id-form">

<tr>

<th valign="top">Product name:</th>

<td><input type="text" class="inp-form" /></td>

<td></td>

</tr>

<tr>

<th valign="top">Product name:</th>

<td><input type="text" class="inp-form-error" /></td>

<td>

<div class="error-left"></div>

<div class="error-inner">This field is required.</div>

</td>

</tr>

<tr>

<th valign="top">Category:</th>

<td>

<select class="styledselect_form_1">

<option value="">All</option>

<option value="">Products</option>

<option value="">Categories</option>

<option value="">Clients</option>

<option value="">News</option>

Page 82: Documentci

</select>

</td>

<td></td>

</tr>

<tr>

<th valign="top">Sub Category:</th>

<td>

<select class="styledselect_form_1">

<option value="">All</option>

<option value="">Products</option>

<option value="">Categories</option>

<option value="">Clients</option>

<option value="">News</option>

</select>

</td>

<td></td>

</tr>

<tr>

<th valign="top">Price:</th>

<td><input type="text" class="inp-form" /></td>

<td></td>

</tr>

<tr>

<th valign="top">Select a date:</th>

<td class="noheight">

<table border="0" cellpadding="0" cellspacing="0">

<tr valign="top">

<td>

<form id="chooseDateForm" action="#">

<select id="d" class="styledselect-

day">

<option value="">dd</option>

<option value="1">1</option>

<option value="2">2</option>

<option value="3">3</option>

<option value="4">4</option>

<option value="5">5</option>

<option value="6">6</option>

<option value="7">7</option>

<option value="8">8</option>

<option value="9">9</option>

<option value="10">10</option>

<option value="11">11</option>

<option value="12">12</option>

<option value="13">13</option>

<option value="14">14</option>

<option value="15">15</option>

Page 83: Documentci

<option value="16">16</option>

<option value="17">17</option>

<option value="18">18</option>

<option value="19">19</option>

<option value="20">20</option>

<option value="21">21</option>

<option value="22">22</option>

<option value="23">23</option>

<option value="24">24</option>

<option value="25">25</option>

<option value="26">26</option>

<option value="27">27</option>

<option value="28">28</option>

<option value="29">29</option>

<option value="30">30</option>

<option value="31">31</option>

</select>

</td>

<td>

<select id="m" class="styledselect-month">

<option value="">mmm</option>

<option value="1">Jan</option>

<option value="2">Feb</option>

<option value="3">Mar</option>

<option value="4">Apr</option>

<option value="5">May</option>

<option value="6">Jun</option>

<option value="7">Jul</option>

<option value="8">Aug</option>

<option value="9">Sep</option>

<option value="10">Oct</option>

<option value="11">Nov</option>

<option value="12">Dec</option>

</select>

</td>

<td>

<select id="y" class="styledselect-

year">

<option value="">yyyy</option>

<option value="2005">2005</option>

<option value="2006">2006</option>

<option value="2007">2007</option>

<option value="2008">2008</option>

<option value="2009">2009</option>

<option value="2010">2010</option>

</select>

</form>

</td>

Page 84: Documentci

<td><a href="" id="date-pick"><img src="<?php

echo base_url(); ?>assets/images/forms/icon_calendar.jpg" alt="" /></a></td>

</tr>

</table>

</td>

<td></td>

</tr>

<tr>

<th valign="top">Description:</th>

<td><textarea rows="" cols="" class="form-

textarea"></textarea></td>

<td></td>

</tr>

<tr>

<th>Image 1:</th>

<td><input type="file" class="file_1" /></td>

<td>

<div class="bubble-left"></div>

<div class="bubble-inner">JPEG, GIF 5MB max per

image</div>

<div class="bubble-right"></div>

</td>

</tr>

<tr>

<th>Image 2:</th>

<td> <input type="file" class="file_1" /></td>

<td><div class="bubble-left"></div>

<div class="bubble-inner">JPEG, GIF 5MB max per

image</div>

<div class="bubble-right"></div></td>

</tr>

<tr>

<th>Image 3:</th>

<td><input type="file" class="file_1" /></td>

<td><div class="bubble-left"></div>

<div class="bubble-inner">JPEG, GIF 5MB max per

image</div>

<div class="bubble-right"></div></td>

</tr>

<tr>

<th>&nbsp;</th>

<td valign="top">

<input type="button" value="" class="form-submit" />

<input type="reset" value="" class="form-reset" />

</td>

<td></td>

</tr>

</table>

Page 85: Documentci

<!-- end id-form -->

</td>

<td>

<!-- start related-activities -->

<div id="related-activities">

<!-- start related-act-top -->

<div id="related-act-top">

<img src="<?php echo base_url();

?>assets/images/forms/header_related_act.gif" width="271" height="43" alt="" />

</div>

<!-- end related-act-top -->

<!-- start related-act-bottom -->

<div id="related-act-bottom">

<!-- start related-act-inner -->

<div id="related-act-inner">

<div class="left"><a href=""><img src="<?php echo

base_url(); ?>assets/images/forms/icon_plus.gif" width="21" height="21" alt="" /></a></div>

<div class="right">

<h5>Add another product</h5>

Lorem ipsum dolor sit amet consectetur

adipisicing elitsed do eiusmod tempor.

<ul class="greyarrow">

<li><a href="">Click here to visit</a></li>

<li><a href="">Click here to visit</a> </li>

</ul>

</div>

<div class="clear"></div>

<div class="lines-dotted-short"></div>

<div class="left"><a href=""><img src="<?php echo

base_url(); ?>assets/images/forms/icon_minus.gif" width="21" height="21" alt="" /></a></div>

<div class="right">

<h5>Delete products</h5>

Lorem ipsum dolor sit amet consectetur

adipisicing elitsed do eiusmod tempor.

<ul class="greyarrow">

<li><a href="">Click here to visit</a></li>

<li><a href="">Click here to visit</a> </li>

</ul>

</div>

<div class="clear"></div>

<div class="lines-dotted-short"></div>

Page 86: Documentci

<div class="left"><a href=""><img src="<?php echo

base_url(); ?>assets/images/forms/icon_edit.gif" width="21" height="21" alt="" /></a></div>

<div class="right">

<h5>Edit categories</h5>

Lorem ipsum dolor sit amet consectetur

adipisicing elitsed do eiusmod tempor.

<ul class="greyarrow">

<li><a href="">Click here to visit</a></li>

<li><a href="">Click here to visit</a> </li>

</ul>

</div>

<div class="clear"></div>

</div>

<!-- end related-act-inner -->

<div class="clear"></div>

</div>

<!-- end related-act-bottom -->

</div>

<!-- end related-activities -->

</td>

</tr>

<tr>

<td><img src="<?php echo base_url(); ?>assets/images/shared/blank.gif"

width="695" height="1" alt="blank" /></td>

<td></td>

</tr>

</table>

<div class="clear"></div>

</div>

<!-- end content-table-inner -->

</td>

<td id="tbl-border-right"></td>

</tr>

<tr>

<th class="sized bottomleft"></th>

<td id="tbl-border-bottom">&nbsp;</td>

<th class="sized bottomright"></th>

</tr>

</table>

<div class="clear">&nbsp;</div>

</div>

<!-- end content -->

<div class="clear">&nbsp;</div>

</div>

<!-- end content-outer -->

Page 87: Documentci

2. Tambahkan fungsi pada file “user.php” pada direktori “application/controller” menjadi seperti

berikut :

user.php

<?php

if (!defined('BASEPATH'))

exit('No direct script access allowed');

class user extends MY_Controller {

function grid() {

$data['page'] = 'user_view';

//Load Users from model

$this->load->model('User_model');

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

$config['base_url'] = base_url() . $this->uri->segment(1) . '/' . 'grid/';

$config['total_rows'] = $this->User_model->get_count_user();

$config['per_page'] = 5;

$offset = $this->uri->segment(3);

$offset = (!is_numeric($offset) || $offset < 1) ? 0 : $offset;

$allUsers = $this->User_model->get_user_use_limit($config['per_page'], $offset);

$data['users'] = $allUsers;

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

$this->load->view('container', $data);

}

function insert() {

$data['page'] = 'user_insert';

$this->load->view('container', $data);

}

}

?>

3. Akses kembali halaman http://localhost/training/User/insert maka outputnya akan terlihat seperti

berikut :

Page 88: Documentci

4. Entry data user tentunya berelasi dengan role, sehingga kita buat model terlebih dahulu untuk role,

Buat model role dengan nama “role_model.php”, pada direktori “application/models”. Isikan

dengan baris kode berikut :

role_model.php

<?php

class Role_model extends CI_Model {

function get_all_role() {

$objRoles = $this->db->get('m_role')->result_object();

return $objRoles;

}

}

?>

5. Setelah itu rombak untuk controller “user.php” untuk proses insert data dan load role , kode terlihat

seperti berikut :

<?php

if (!defined('BASEPATH'))

exit('No direct script access allowed');

class user extends MY_Controller {

function grid() {

$data['page'] = 'user_view';

Page 89: Documentci

//Load Users from model

$this->load->model('User_model');

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

$config['base_url'] = base_url() . $this->uri->segment(1) . '/' . 'grid/';

$config['total_rows'] = $this->User_model->get_count_user();

$config['per_page'] = 5;

$offset = $this->uri->segment(3);

$offset = (!is_numeric($offset) || $offset < 1) ? 0 : $offset;

$allUsers = $this->User_model->get_user_use_limit($config['per_page'], $offset);

$data['users'] = $allUsers;

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

$this->load->view('container', $data);

}

function insert() {

$data['page'] = 'user_insert';

//Load Role from model

$this->load->model('Role_model');

$data['roles'] = $this->Role_model->get_all_role();

$is_submited = $this->input->post('submit');

if ($is_submited){

//Get Data from post

$user_name = $this->input->post('user_name');

$user_password = $this->input->post('user_password');

$user_password2 = $this->input->post('user_password2');

$role_id = $this->input->post('role_id');

$user_active = $this->input->post('user_active');

//Insert to database

$this->db->insert('m_user', array(

'user_name' => $user_name,

'user_password' => $user_password,

'role_id' => $role_id,

'user_active' => $user_active,

));

}

$this->load->view('container', $data);

}

Page 90: Documentci

}

?>

6. Selanjutnya kita akan sesuaikan tema tersebut dengan data entry user, sehingga kita ubah kembali

file user_insert.php, menjadi seperti berikut :

user_insert.php

<!-- start content-outer -->

<div id="content-outer">

<!-- start content -->

<div id="content">

<div id="page-heading"><h1>Add User</h1></div>

<table border="0" width="100%" cellpadding="0" cellspacing="0" id="content-table">

<tr>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowleft.jpg" width="20" height="300" alt="" /></th>

<th class="topleft"></th>

<td id="tbl-border-top">&nbsp;</td>

<th class="topright"></th>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowright.jpg" width="20" height="300" alt="" /></th>

</tr>

<tr>

<td id="tbl-border-left"></td>

<td>

<!-- start content-table-inner -->

<div id="content-table-inner">

<table border="0" width="100%" cellpadding="0" cellspacing="0">

<tr valign="top">

<td>

<!-- start id-form -->

<?php

echo form_open(base_url() . 'User/insert/');

$user_name = array(

"name" => "user_name",

"class" => "inp-form",

"value" => "",

);

$user_password = array(

"name" => "user_password",

"class" => "inp-form",

"value" => "",

);

Page 91: Documentci

$user_password2 = array(

"name" => "user_password2",

"class" => "inp-form",

"value" => "",

);

$role_option = array();

foreach ($roles as $role){

$role_option[$role->role_id] = $role->role_name;

}

$active_option = array

(

"1" => "Yes",

"0" => "No"

);

$submit = array(

"name" => "submit",

"value" => "submit",

"class" => "form-submit"

);

?>

<table border="0" cellpadding="0" cellspacing="0" id="id-form">

<tr>

<th valign="top">User Name:</th>

<td><?php echo form_input($user_name); ?></td>

<td></td>

</tr>

<tr>

<th valign="top">User Password:</th>

<td><?php echo form_password($user_password); ?></td>

</tr>

<tr>

<th valign="top">Confirm Password:</th>

<td><?php echo form_password($user_password2); ?></td>

</tr>

<tr>

<th valign="top">Role:</th>

<td>

<?php echo form_dropdown('role_id', $role_option,

array(), 'class="styledselect_form_1"' ); ?>

</td>

<td></td>

</tr>

<tr>

Page 92: Documentci

<th valign="top">Active:</th>

<td>

<?php echo form_dropdown('user_active',

$active_option, array(), 'class="styledselect_form_1"'); ?>

</td>

<td></td>

</tr>

<tr>

<th>&nbsp;</th>

<td style="float: right;" valign="top">

<?php echo form_submit($submit); ?>

</td>

<td></td>

</tr>

</table>

<?php echo form_close(); ?>

<!-- end id-form -->

</td>

</tr>

<tr>

<td><img src="<?php echo base_url(); ?>assets/images/shared/blank.gif"

width="695" height="1" alt="blank" /></td>

<td></td>

</tr>

</table>

<div class="clear"></div>

</div>

<!-- end content-table-inner -->

</td>

<td id="tbl-border-right"></td>

</tr>

<tr>

<th class="sized bottomleft"></th>

<td id="tbl-border-bottom">&nbsp;</td>

<th class="sized bottomright"></th>

</tr>

</table>

<div class="clear">&nbsp;</div>

</div>

<!-- end content -->

<div class="clear">&nbsp;</div>

</div>

<!-- end content-outer -->

Page 93: Documentci

Pada baris kode diatas kita menggunakan form_helper pada codeigniter untuk membuat html form,

untuk lebih jelasnya dapat di lihat pada link berikut ini :

http://codeigniter.com/user_guide/helpers/form_helper.html

7. Silahkan coba masukkan data, bila data berhasil ditambahkan maka program anda sudah benar.

Task 4 – Edit Data

Edit data hampir sama dengan insert data, namun data user di load terlebih dahulu.

1. Buat fungsi baru pada model user_model.php, untuk mengambil 1 record data berdasarkan id user,

seperti terlihat pada baris kode berikut :

user_model.php

<?php

class User_model extends CI_Model {

function login($username, $password) {

$this->db->select('*');

$this->db->from('m_user');

$this->db->where('user_name', $username);

$this->db->where('user_password', sha1($password));

$this->db->where('user_active', 1);

$objUsers = $this->db->get()->result_object();

if (count($objUsers) == 1) {

return $objUsers[0];

} else {

return FALSE;

}

}

function get_all_user() {

$this->db->select('*');

$this->db->from('m_user');

$this->db->join('m_role', 'm_user.role_id = m_role.role_id');

$objUsers = $this->db->get()->result_object();

return $objUsers;

}

//Mendapatkan jumlah record dari user

function get_count_user() {

Page 94: Documentci

return $this->db->count_all_results('m_user');

}

//Mendapatkan data user dengan limit

function get_user_use_limit($limit, $offset) {

$this->db->select('*');

$this->db->from('m_user');

$this->db->join('m_role', 'm_user.role_id = m_role.role_id');

$this->db->limit($limit, $offset);

$objUsers = $this->db->get()->result_object();

return $objUsers;

}

function get_single_user($userid) {

//Query from user

$this->db->select("*");

$this->db->from("m_user");

$this->db->where("userid", $userid);

$allUser = $this->db->get()->result_object();

if (count($allUser) > 0){

return $allUser[0];

}

return NULL;

}

}

?>

2. Tambahkan kode pada controller “user.php” menjadi seperti berikut :

user.php

<?php

if (!defined('BASEPATH'))

exit('No direct script access allowed');

class user extends MY_Controller {

function grid() {

$data['page'] = 'user_view';

//Load Users from model

$this->load->model('User_model');

Page 95: Documentci

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

$config['base_url'] = base_url() . $this->uri->segment(1) . '/' . 'grid/';

$config['total_rows'] = $this->User_model->get_count_user();

$config['per_page'] = 5;

$offset = $this->uri->segment(3);

$offset = (!is_numeric($offset) || $offset < 1) ? 0 : $offset;

$allUsers = $this->User_model->get_user_use_limit($config['per_page'], $offset);

$data['users'] = $allUsers;

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

$this->load->view('container', $data);

}

function insert() {

$data['page'] = 'user_insert';

//Load Role from model

$this->load->model('Role_model');

$data['roles'] = $this->Role_model->get_all_role();

$is_submited = $this->input->post('submit');

if ($is_submited) {

//Get Data from post

$user_name = $this->input->post('user_name');

$user_password = $this->input->post('user_password');

$user_password2 = $this->input->post('user_password2');

$role_id = $this->input->post('role_id');

$user_active = $this->input->post('user_active');

//Insert to database

$this->db->insert('m_user', array(

'user_name' => $user_name,

'user_password' => $user_password,

'role_id' => $role_id,

'user_active' => $user_active,

));

}

$this->load->view('container', $data);

}

function edit($id) {

$data['page'] = 'user_edit';

Page 96: Documentci

//Load Role from model

$this->load->model('Role_model');

$data['roles'] = $this->Role_model->get_all_role();

$is_submited = $this->input->post('submit');

if ($is_submited) {

//Get Data from post

$user_name = $this->input->post('user_name');

$user_password = $this->input->post('user_password');

$user_password2 = $this->input->post('user_password2');

$role_id = $this->input->post('role_id');

$user_active = $this->input->post('user_active');

//Insert to database

$this->db->update(

'm_user',

array(

'user_name' => $user_name,

'role_id' => $role_id,

'user_active' => $user_active,

),

array(

'userid' => $id

)

);

}

//Load User from model

$this->load->model('User_model');

$data['user'] = $this->User_model->get_single_user($id);

$this->load->view('container', $data);

}

}

?>

3. Setelah itu buat file dengan nama “user_edit.php” dalam direktori “application/views/”, masukkan

kode berikut :

user_edit.php

<!-- start content-outer -->

<div id="content-outer">

<!-- start content -->

<div id="content">

<div id="page-heading"><h1>Edit User</h1></div>

<table border="0" width="100%" cellpadding="0" cellspacing="0" id="content-table">

<tr>

Page 97: Documentci

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowleft.jpg" width="20" height="300" alt="" /></th>

<th class="topleft"></th>

<td id="tbl-border-top">&nbsp;</td>

<th class="topright"></th>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowright.jpg" width="20" height="300" alt="" /></th>

</tr>

<tr>

<td id="tbl-border-left"></td>

<td>

<!-- start content-table-inner -->

<div id="content-table-inner">

<table border="0" width="100%" cellpadding="0" cellspacing="0">

<tr valign="top">

<td>

<!-- start id-form -->

<?php

echo form_open($this->uri->uri_string());

$user_name = array(

"name" => "user_name",

"class" => "inp-form",

"value" => "$user->user_name",

);

$user_password = array(

"name" => "user_password",

"class" => "inp-form",

"value" => "default",

);

$user_password2 = array(

"name" => "user_password2",

"class" => "inp-form",

"value" => "default",

);

$role_option = array();

foreach ($roles as $role){

$role_option[$role->role_id] = $role->role_name;

}

$selected_role = array(

$user->role_id

);

Page 98: Documentci

$active_option = array

(

"1" => "Yes",

"0" => "No"

);

$selected_active = array(

$user->user_active

);

$submit = array(

"name" => "submit",

"value" => "submit",

"class" => "form-submit"

);

?>

<table border="0" cellpadding="0" cellspacing="0" id="id-form">

<tr>

<th valign="top">User Name:</th>

<td><?php echo form_input($user_name); ?></td>

<td></td>

</tr>

<tr>

<th valign="top">User Password:</th>

<td><?php echo form_password($user_password); ?></td>

</tr>

<tr>

<th valign="top">Confirm Password:</th>

<td><?php echo form_password($user_password2); ?></td>

</tr>

<tr>

<th valign="top">Role:</th>

<td>

<?php echo form_dropdown('role_id', $role_option,

$selected_role, 'class="styledselect_form_1"' ); ?>

</td>

<td></td>

</tr>

<tr>

<th valign="top">Active:</th>

<td>

<?php echo form_dropdown('user_active',

$active_option, $selected_active, 'class="styledselect_form_1"'); ?>

</td>

<td></td>

</tr>

<tr>

Page 99: Documentci

<th>&nbsp;</th>

<td style="float: right;" valign="top">

<?php echo form_submit($submit); ?>

</td>

<td></td>

</tr>

</table>

<?php echo form_close(); ?>

<!-- end id-form -->

</td>

</tr>

<tr>

<td><img src="<?php echo base_url(); ?>assets/images/shared/blank.gif"

width="695" height="1" alt="blank" /></td>

<td></td>

</tr>

</table>

<div class="clear"></div>

</div>

<!-- end content-table-inner -->

</td>

<td id="tbl-border-right"></td>

</tr>

<tr>

<th class="sized bottomleft"></th>

<td id="tbl-border-bottom">&nbsp;</td>

<th class="sized bottomright"></th>

</tr>

</table>

<div class="clear">&nbsp;</div>

</div>

<!-- end content -->

<div class="clear">&nbsp;</div>

</div>

<!-- end content-outer -->

4. Untuk password,kali ini kita tidak perbolehkan untuk di edit, kita beri nilai namun data di update di

sisi server.

5. Setelah itu silahkan coba untuk mengubah data, bila berhasil maka kita akan lanjutkan ke task

berikutnya.

Task 5 – Delete Data

1. Untuk penghapusan data, ubah file controller “user.php” dengan menambahkan fungsi hapus,

seperti terlihat pada baris kode berikut :

Page 100: Documentci

<?php

if (!defined('BASEPATH'))

exit('No direct script access allowed');

class user extends MY_Controller {

function grid() {

$data['page'] = 'user_view';

//Load Users from model

$this->load->model('User_model');

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

$config['base_url'] = base_url() . $this->uri->segment(1) . '/' . 'grid/';

$config['total_rows'] = $this->User_model->get_count_user();

$config['per_page'] = 5;

$offset = $this->uri->segment(3);

$offset = (!is_numeric($offset) || $offset < 1) ? 0 : $offset;

$allUsers = $this->User_model->get_user_use_limit($config['per_page'], $offset);

$data['users'] = $allUsers;

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

$this->load->view('container', $data);

}

function insert() {

$data['page'] = 'user_insert';

//Load Role from model

$this->load->model('Role_model');

$data['roles'] = $this->Role_model->get_all_role();

$is_submited = $this->input->post('submit');

if ($is_submited) {

//Get Data from post

$user_name = $this->input->post('user_name');

$user_password = $this->input->post('user_password');

$user_password2 = $this->input->post('user_password2');

$role_id = $this->input->post('role_id');

$user_active = $this->input->post('user_active');

//Insert to database

$this->db->insert('m_user', array(

Page 101: Documentci

'user_name' => $user_name,

'user_password' => $user_password,

'role_id' => $role_id,

'user_active' => $user_active,

));

}

$this->load->view('container', $data);

}

function edit($id) {

$data['page'] = 'user_edit';

//Load Role from model

$this->load->model('Role_model');

$data['roles'] = $this->Role_model->get_all_role();

$is_submited = $this->input->post('submit');

if ($is_submited) {

//Get Data from post

$user_name = $this->input->post('user_name');

$user_password = $this->input->post('user_password');

$user_password2 = $this->input->post('user_password2');

$role_id = $this->input->post('role_id');

$user_active = $this->input->post('user_active');

//Insert to database

$this->db->update(

'm_user',

array(

'user_name' => $user_name,

'role_id' => $role_id,

'user_active' => $user_active,

),

array(

'userid' => $id

)

);

}

//Load User from model

$this->load->model('User_model');

$data['user'] = $this->User_model->get_single_user($id);

$this->load->view('container', $data);

}

function delete($id) {

$this->db->delete(

Page 102: Documentci

'm_user',

array(

'userid' => $id

)

);

redirect(base_url() . $this->uri->segment(1) . '/' . 'grid/');

}

}

?>

Task 6 – Validation Rule

1. Untuk menambahkan validation rule pada modul insert, silahkan buka kembali file controller

“user.php”pada direktori “application/controllers”.

Kemudian tambahkan kode agar terlihat seperti berikut :

<?php

if (!defined('BASEPATH'))

exit('No direct script access allowed');

class user extends MY_Controller {

function grid() {

$data['page'] = 'user_view';

//Load Users from model

$this->load->model('User_model');

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

$config['base_url'] = base_url() . $this->uri->segment(1) . '/' . 'grid/';

$config['total_rows'] = $this->User_model->get_count_user();

$config['per_page'] = 5;

$offset = $this->uri->segment(3);

$offset = (!is_numeric($offset) || $offset < 1) ? 0 : $offset;

$allUsers = $this->User_model->get_user_use_limit($config['per_page'], $offset);

$data['users'] = $allUsers;

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

$this->load->view('container', $data);

}

Page 103: Documentci

function insert() {

$data['page'] = 'user_insert';

//Load Role from model

$this->load->model('Role_model');

$data['roles'] = $this->Role_model->get_all_role();

$is_submited = $this->input->post('submit');

if ($is_submited) {

//Check validation

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

$this->form_validation->set_rules('user_name',

'Username','trim|required|alpha_numeric|min_length[6]|strtolower');

$this->form_validation->set_rules('user_password',

'Password','trim|required|min_length[6]|matches[user_password2]');

$this->form_validation->set_rules('user_password2', 'Confirm

Password','trim|required|min_length[6]');

if ($this->form_validation->run() == FALSE) {

//Data tidak valid

} else {

//Data Valid

//Get Data from post

$user_name = $this->input->post('user_name');

$user_password = $this->input->post('user_password');

$user_password2 = $this->input->post('user_password2');

$role_id = $this->input->post('role_id');

$user_active = $this->input->post('user_active');

//Insert to database

$this->db->insert('m_user', array(

'user_name' => $user_name,

'user_password' => $user_password,

'role_id' => $role_id,

'user_active' => $user_active,

));

}

}

$this->load->view('container', $data);

}

function edit($id) {

$data['page'] = 'user_edit';

Page 104: Documentci

//Load Role from model

$this->load->model('Role_model');

$data['roles'] = $this->Role_model->get_all_role();

$is_submited = $this->input->post('submit');

if ($is_submited) {

//Get Data from post

$user_name = $this->input->post('user_name');

$user_password = $this->input->post('user_password');

$user_password2 = $this->input->post('user_password2');

$role_id = $this->input->post('role_id');

$user_active = $this->input->post('user_active');

//Insert to database

$this->db->update(

'm_user',

array(

'user_name' => $user_name,

'role_id' => $role_id,

'user_active' => $user_active,

),

array(

'userid' => $id

)

);

}

//Load User from model

$this->load->model('User_model');

$data['user'] = $this->User_model->get_single_user($id);

$this->load->view('container', $data);

}

function delete($id) {

$this->db->delete(

'm_user',

array(

'userid' => $id

)

);

redirect(base_url() . $this->uri->segment(1) . '/' . 'grid/');

}

}

?>

Page 105: Documentci

Untuk fitur dari form_validation library dapat dilihat pada dokumentasi codeigniter pada alamat

berikut :

http://codeigniter.com/user_guide/libraries/form_validation.html

2. Kemudian kita tambahkan view user_insert.php, agar dapat menampilkan error dari validasi, seperti

pada kode di bawah ini :

<!-- start content-outer -->

<div id="content-outer">

<!-- start content -->

<div id="content">

<div id="page-heading"><h1>Add User</h1></div>

<table border="0" width="100%" cellpadding="0" cellspacing="0" id="content-table">

<tr>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowleft.jpg" width="20" height="300" alt="" /></th>

<th class="topleft"></th>

<td id="tbl-border-top">&nbsp;</td>

<th class="topright"></th>

<th rowspan="3" class="sized"><img src="<?php echo base_url();

?>assets/images/shared/side_shadowright.jpg" width="20" height="300" alt="" /></th>

</tr>

<tr>

<td id="tbl-border-left"></td>

<td>

<!-- start content-table-inner -->

<div id="content-table-inner">

<table border="0" width="100%" cellpadding="0" cellspacing="0">

<tr valign="top">

<td>

<!-- start id-form -->

<?php

echo form_open(base_url() . 'User/insert/');

$user_name = array(

"name" => "user_name",

"class" => "inp-form",

"value" => "",

);

$user_password = array(

"name" => "user_password",

"class" => "inp-form",

"value" => "",

);

$user_password2 = array(

Page 106: Documentci

"name" => "user_password2",

"class" => "inp-form",

"value" => "",

);

$role_option = array();

foreach ($roles as $role){

$role_option[$role->role_id] = $role->role_name;

}

$active_option = array

(

"1" => "Yes",

"0" => "No"

);

$submit = array(

"name" => "submit",

"value" => "submit",

"class" => "form-submit"

);

?>

<table border="0" cellpadding="0" cellspacing="0" id="id-form">

<tr>

<th valign="top">User Name:</th>

<td><?php echo form_input($user_name); ?></td>

<td></td>

</tr>

<tr>

<th valign="top">User Password:</th>

<td><?php echo form_password($user_password); ?></td>

</tr>

<tr>

<th valign="top">Confirm Password:</th>

<td><?php echo form_password($user_password2); ?></td>

</tr>

<tr>

<th valign="top">Role:</th>

<td>

<?php echo form_dropdown('role_id', $role_option,

array(), 'class="styledselect_form_1"' ); ?>

</td>

<td></td>

</tr>

<tr>

<th valign="top">Active:</th>

<td>

Page 107: Documentci

<?php echo form_dropdown('user_active',

$active_option, array(), 'class="styledselect_form_1"'); ?>

</td>

<td></td>

</tr>

<tr>

<th></th>

<td><?php echo validation_errors(); ?></td>

<td></td>

</tr>

<tr>

<th>&nbsp;</th>

<td style="float: right;" valign="top">

<?php echo form_submit($submit); ?>

</td>

<td></td>

</tr>

</table>

<?php echo form_close(); ?>

<!-- end id-form -->

</td>

</tr>

<tr>

<td><img src="<?php echo base_url(); ?>assets/images/shared/blank.gif"

width="695" height="1" alt="blank" /></td>

<td></td>

</tr>

</table>

<div class="clear"></div>

</div>

<!-- end content-table-inner -->

</td>

<td id="tbl-border-right"></td>

</tr>

<tr>

<th class="sized bottomleft"></th>

<td id="tbl-border-bottom">&nbsp;</td>

<th class="sized bottomright"></th>

</tr>

</table>

<div class="clear">&nbsp;</div>

</div>

<!-- end content -->

<div class="clear">&nbsp;</div>

</div>

<!-- end content-outer -->

Page 108: Documentci
Page 109: Documentci

BAB 7: Bulk Action

Bab ini difokuskan untuk melakukan editing data dan delete data secara bersamaan dalam satu waktu.

[DELETED]

Page 110: Documentci

BAB 8: Pattern Implementation

Bab ini difokuskan agar model dapat memiliki fitur yang lebih baik, tanpa menulis kembali kode-kode

yang tidak perlu.

[DELETED]

Page 111: Documentci

BAB 9: Code Generation

Bab ini difokuskan untuk meng-generate model maupun form dari Power Designer.

[DELETED]

Page 112: Documentci

BAB 10: AJAX & JQUERY

Bab ini difokuskan untuk mengubah pola grid dan form menjadi ajax based.

[DELETED]