Upload
de-queen
View
338
Download
3
Embed Size (px)
Citation preview
Hands-On Lab
Code Igniter 2.1.0
Created By : Willy Achmat Fauzi
Lab version : 1.0
Last updated : 3/16/2012
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
BAB 7: BULK ACTION ..................................................................................................................... 109
BAB 8: PATTERN IMPLEMENTATION ............................................................................................ 110
BAB 9: CODE GENERATION ........................................................................................................... 111
BAB 10: AJAX & JQUERY ............................................................................................................... 112
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
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 :
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/
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 :
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.
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 :
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 :
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(){
$('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({
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'
}
).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();
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>
</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"> </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"> </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"> </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"> </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"> </div>
<div class="acc-line"> </div>
<a id="acc-details" href="">Personal details </a>
<div class="clear"> </div>
<div class="acc-line"> </div>
<a id="acc-project" href="">Project details</a>
<div class="clear"> </div>
<div class="acc-line"> </div>
<a id="acc-inbox" href="">Inbox</a>
<div class="clear"> </div>
<div class="acc-line"> </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">
<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"> </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"> </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">
<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"> </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"> </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>
<!-- start nav-outer -->
</div>
<div class="clear"></div>
footer.php
<div id="footer">
<!-- start footer-left -->
<div id="footer-left">
Admin Skin © 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"> </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"> </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>
<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"> </td>
<th class="sized bottomright"></th>
</tr>
</tbody></table>
<div class="clear"> </div>
</div>
<!-- end content -->
<div class="clear"> </div>
</div>
<div class="clear"> </div>
Sehingga saat ini struktur file pada view terlihat seperti berikut :
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 :
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 :
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 :
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 :
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
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 :
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 :
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 :
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 :
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 :
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 :
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.
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 :
9. Masuk ke tab Import, kemudian browse file hasil output dari PDM tadi. Setelah itu klik “GO”.
Gambar terlihat seperti berikut :
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
* @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 {};
?>
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.
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.
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"> </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"> </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"> </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"> </div>
<div class="acc-line"> </div>
<a id="acc-details" href="">Personal details </a>
<div class="clear"> </div>
<div class="acc-line"> </div>
<a id="acc-project" href="">Project details</a>
<div class="clear"> </div>
<div class="acc-line"> </div>
<a id="acc-inbox" href="">Inbox</a>
<div class="clear"> </div>
<div class="acc-line"> </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"> </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>
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 :
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"> </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="">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>
<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................................... -->
</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>
<tr>
<th class="sized bottomleft"></th>
<td id="tbl-border-bottom"> </td>
<th class="sized bottomright"></th>
</tr>
</table>
<div class="clear"> </div>
</div>
<!-- end content -->
<div class="clear"> </div>
</div>
<div class="clear"> </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 :
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.
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.
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">
$(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>
</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 :
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');
}
}
}
?>
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;
}
}
}
?>
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');
}
}
?>
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 ........... -->
<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>
<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);
//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 -->
<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>
<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>
</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"> </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"> </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"> </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"> </div>
<div class="acc-line"> </div>
<a id="acc-details" href="">Personal details </a>
<div class="clear"> </div>
<div class="acc-line"> </div>
<a id="acc-project" href="">Project details</a>
<div class="clear"> </div>
<div class="acc-line"> </div>
<a id="acc-inbox" href="">Inbox</a>
<div class="clear"> </div>
<div class="acc-line"> </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"> </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>
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);
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();
$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);
//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.
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('*');
$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);
}
}
?>
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"> </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>
</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>
<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"> </td>
<th class="sized bottomright"></th>
</tr>
</table>
<div class="clear"> </div>
</div>
<!-- end content -->
<div class="clear"> </div>
</div>
<div class="clear"> </div>
5. Buka halaman http://localhost/training/User maka output akan terlihat seperti gambar berikut :
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"> </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"> </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"> </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"> </div>
<div class="acc-line"> </div>
<a id="acc-details" href="">Personal details </a>
<div class="clear"> </div>
<div class="acc-line"> </div>
<a id="acc-project" href="">Project details</a>
<div class="clear"> </div>
<div class="acc-line"> </div>
<a id="acc-inbox" href="">Inbox</a>
<div class="clear"> </div>
<div class="acc-line"> </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"> </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>
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('*');
$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);
}
}
?>
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"> </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>
</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>
<!-- 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"> </td>
<th class="sized bottomright"></th>
</tr>
</table>
<div class="clear"> </div>
</div>
<!-- end content -->
<div class="clear"> </div>
</div>
<div class="clear"> </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;
}
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"> </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 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"> </div>
<div class="step-no-off">2</div>
<div class="step-light-left">Select related products</div>
<div class="step-light-right"> </div>
<div class="step-no-off">3</div>
<div class="step-light-left">Preview</div>
<div class="step-light-round"> </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>
</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>
<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>
<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> </th>
<td valign="top">
<input type="button" value="" class="form-submit" />
<input type="reset" value="" class="form-reset" />
</td>
<td></td>
</tr>
</table>
<!-- 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>
<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"> </td>
<th class="sized bottomright"></th>
</tr>
</table>
<div class="clear"> </div>
</div>
<!-- end content -->
<div class="clear"> </div>
</div>
<!-- end content-outer -->
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 :
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';
//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);
}
}
?>
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"> </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(
"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>
<?php echo form_dropdown('user_active',
$active_option, array(), 'class="styledselect_form_1"'); ?>
</td>
<td></td>
</tr>
<tr>
<th> </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"> </td>
<th class="sized bottomright"></th>
</tr>
</table>
<div class="clear"> </div>
</div>
<!-- end content -->
<div class="clear"> </div>
</div>
<!-- end content-outer -->
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() {
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');
$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';
//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>
<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"> </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
);
$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>
<th> </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"> </td>
<th class="sized bottomright"></th>
</tr>
</table>
<div class="clear"> </div>
</div>
<!-- end content -->
<div class="clear"> </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 :
<?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(
'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(
'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);
}
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';
//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/');
}
}
?>
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"> </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(
"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>
<?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> </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"> </td>
<th class="sized bottomright"></th>
</tr>
</table>
<div class="clear"> </div>
</div>
<!-- end content -->
<div class="clear"> </div>
</div>
<!-- end content-outer -->
BAB 7: Bulk Action
Bab ini difokuskan untuk melakukan editing data dan delete data secara bersamaan dalam satu waktu.
[DELETED]
BAB 8: Pattern Implementation
Bab ini difokuskan agar model dapat memiliki fitur yang lebih baik, tanpa menulis kembali kode-kode
yang tidak perlu.
[DELETED]
BAB 9: Code Generation
Bab ini difokuskan untuk meng-generate model maupun form dari Power Designer.
[DELETED]
BAB 10: AJAX & JQUERY
Bab ini difokuskan untuk mengubah pola grid dan form menjadi ajax based.
[DELETED]