Buku Ajar Pemrograman Web Lanjut
Buku Ajar Pemrograman Web Lanjut
Buku Ajar Pemrograman Web Lanjut
CODEIGNITER 13
Buku Pegangan Matakuliah Pemrograman
Web
Abstract
Pengembangan aplikasi web memanfaatkan framework CodeIgniter 3.
Terdapat penggunaan helper dan library baik untuk menampilkan data,
mengedit data, dan mengunggah file.
iii
1 Pendahuluan
1.1 Konsep dasar
Bagian View adalah bagian program yang hasilnya akan dilihat oleh user.
Secara umum View adalah sebuah halaman web, tetapi dapat juga berupa
potongan halaman, seperti misalnya bagian atas atau bawah dari sebuah
halaman. Atau juga dapat berupa sebuah halaman yang merupakan data seperti
halaman RSS.
Bagian Controller adalah bagian yang berada diantara Model dan View.
Controller adalah bagian utama yang akan mengolah seluruh HTTP Request.
Semua permintaan yang biasanya tertulis pada bagian URL sebuah browser,
akan melewati controller. Kemudian controller yang akan menggunakan Model,
View, atau Helper, Library.
Dan akhirnya, View akan di buat untuk ditampilkan pada web browser. Jika
caching diatur enable, maka view akan disimpan terlebih dahulu.
1.2 MVC
Controller adalah file utama yang menjadi request dari user. File controller
disimpan pada folder application/controller. Untuk saat ini semua controller
yang akan dibuat adalah turunan dari CI_Controller. Untuk tahap yang lebih
2
lanjut, dapat dikembangkan sebuah class baru sebagai parent dari class
controller yang akan dibuat.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Index Page for this controller.
*
* Maps to the following URL
* http://example.com/index.php/welcome
* - or -
* http://example.com/index.php/welcome/index
* - or -
* Since this controller is set as the default controller in
* config/routes.php, it's displayed at http://example.com/
*
* So any other public methods not prefixed with an underscore will
* map to /index.php/welcome/<method_name>
* @see https://codeigniter.com/user_guide/general/urls.html
*/
public function index()
{
$this->load->view('welcome_message');
}
}
A.Membuat Controller
CodeIgniter telah memanfaatkan model pemrograman berorientasi object.
Dalam pemrograman berorientasi object, nama class dapat berupa benda atau
objek. Contoh nama class adalah mahasiswa, berita, penjualan, dan lain-lain.
3
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
Sedangkan nama fungsi adalah metode yang biasanya dituliskan dalam kata
kerja. Biasanya method dapat berupa get (mengambil), atau set (mengisi).
Contoh nama function/method adalah tambah, hapus, getAll dan lain-lain.
Rasanya cukup aneh jika nama dari sebuah class adalah "Tambah". Sehingga
nama class sebaiknya berupa kata benda, sedangkan nama fungsi adalah kata
kerja.
Berikut ini adalah script pada file 'berita_view.php' yang terdapat dalam folder
application/views.
<h1>Percobaan</h1>
Perintah berikut ditulis di Controller atau dapat juga di Views dan digunakan
untuk menampilkan isi dari file berita_view yang ada di dalam folder
application/views tersebut.
Contoh :
$this->load->view('berita_view');
Karena isi dari folder ini akan sangat banyak, maka perlu dilakukan pengaturan
penulisan file. Misalnya untuk semua view yang terkait dengan Controller berita,
4
dimasukkan kedalam folder berita. Sehingga isi dari folder view adalah sebagai
berikut :
Maka perintah untuk memanggil file view.php dalam folder view menjadi sebagai
berikut :
$this->load->view('berita\view');
$this->load->view('header');
$this->load->view('menu');
$this->load->view('content', $data);
$this->load->view('footer');
Jika terdapat beberapa view yang dipanggil, maka tampilan akan digabung dan
menjadi sebuah halaman.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$this->load->view('berita/view', $data);
}
}
5
Pada potongan diatas terdapat sebuah variable $data yang merupakan Array
Associcative, yang memiliki tiga buah index (title, heading, dan message).
Maka pada file view akan menerima 3 (tiga) buah variable yaitu $title,
$heading, dan $message. Berikut ini adalah isi dari file
application/views/berita/view.php:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
<div><?php echo $message;?></div>
</body>
</html>
localhost/ci/index.php/berita/index.
localhost/ci/index.php/berita
function index adalah fungsi default yang akan dipanggil jika tidak dituliskan
dibelakang controller.
D. Membuat Model
Bagian Model digunakan untuk membuat fungsi-fungsi yang berhubungan
dengan database. Nama class dari Model, biasanya terkait dengan data yang
akan diolah. Contoh nama Model adalah mahasiswa_model, yang artinya akan
berisi fungsi yang berhubungan dengan table mahasiswa. Sedangkan nama
fungsi biasanya berupa operasi yang dapat dilakukan terhadap table. Contoh
nama fungsi yang berhubungan dengan database adalah get, update, delete,
ambil, ambil_data_by_nrp, getByNRP, save, simpan, tambah dan lain-lain.
File model disimpan di dalam folder application/models. Berikut ini contoh Model
public $judul;
public $isi;
public $tanggal;
Perlu diperhatikan adalah bahwa semua Model hanya dipanggil oleh controller.
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'stiki',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
Bagian yang penting untuk diisi adalah username, password, dan nama database
(baris 4 sampai 6).
7
D.2 Mengaktifkan database
Setelah mengatur konfigurasi database, yang harus dilakukan adalah
mengaktifkan library database. Untuk mengaktifkan library database dapat
dilakukan dengan beberapa cara berikut:
$autoload['libraries'] = array('database');
$autoload['model'] = array('berita_model');
Get()
Get_where()
$this->db->select()
$this->db->select_max()
$this->db->select_min()
$this->db->select_avg()
$this->db->select_sum()
$this->db->from()
$this->db->join()
$this->db->where()
$this->db->like()
$this->db->having()
$this->db->order_by()
$this->db->where('kode',$kode);
$this->db->like('judul',$judul);
$query = $this->db->get('berita');
Select * from berita where kode = $kode and judul like %$judul% 9
D.5 Query Result
result(): Method ini akan memberikan nilai array dari object, dan
biasanya untuk mengambil datanya menggunakan foreach
$query = $this->db->get("berita");
$result = $query->result();
$query = $this->db->get("berita");
row() : Method ini akan memberikan satu data (record) dalam bentuk
object.
$query = $this->db->get("berita");
$row = $query->row();
if (isset($row))
{
echo $row->title;
echo $row->name;
echo $row->body;
}
$query = $this->db->get("berita");
$row = $query->row_array();
if (isset($row))
{
echo $row['title'];
10
echo $row['name'];
echo $row['body'];
}
E.1 Controller
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$this->load->view('berita/view', $data);
}
}
E.2 Model
<?php
class Berita_model extends CI_Model {
public function __construct()
{
$this->load->database();
}
E.3 View
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?=$title;?></title>
</head>
<body>
<h1><?=$heading;?></h1>
<div><?=$message;?></div>
<?php
Array Helper
CAPTCHA Helper
Cookie Helper
Date Helper
Directory Helper
Download Helper
Email Helper
File Helper
Form Helper
HTML Helper
Inflector Helper
Language Helper
Number Helper
Path Helper
Security Helper
Smiley Helper
String Helper
12
Text Helper
Typography Helper
URL Helper
XML Helper
Selain helper, CodeIgniter juga memiliki Library. Tidak seperti helper, Library
adalah class yang terletak pada folder system/libraries dan bertugas untuk
membantu sebuah tugas seusai dengan nama library. Misalnya Library Form
Validation, adalah class yang berisi sekumpulan fungsi yang digunakan untuk
membantu validasi form.
Benchmarking Class
Caching Driver
Calendaring Class
Shopping Cart Class
Config Class
Email Class
Encrypt Class
Encryption Library
File Uploading Class
Form Validation
FTP Class
Image Manipulation Class
Input Class
Javascript Class
Language Class
Loader Class
Migrations Class
Output Class
Pagination Class
Template Parser Class
Security Class
Session Library
HTML Table Class
Trackback Class
Typography Class
Unit Testing Class
URI Class
User Agent Class
XML-RPC and XML-RPC Server Classes
Zip Encoding Class
$this->load->library('form_validation');
$this->load->library('table');
Atau
$this->load->helper('url','form');
$this->load->library('form_validation','table');
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$this->load->library('table');
$this->load->view('berita/view', $data);
}
}
B.2 View
Pada view dilakukan penggunaan fungsi yang ada dalam library table, seperti
petunjuk pada User Guide.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
14
<title><?=$title;?></title>
</head>
<body>
<h1><?=$heading;?></h1>
<div><?=$message;?></div>
<?php
$template = array('table_open' => '<table>');
$this->table->set_template($template);
echo $this->table->generate();
?>
</body>
</html>
site_url()
base_url()
current_url()
anchor()
anchor_popup()
redirect
untuk membuat link digunakan fungsi anchor(). Fungsi anchor() ini akan
membuat link html berdasar pada alamat web saat ini.
15
Yang perlu dipersiapkan adalah file pendukung
(https://datatables.net/download/):
1. Memasukkan file CSS dan JS dari JQuery, dan DataTable. Untuk memasukkan
file tersebut dapat dilakukan dengan cara-cara berikut :
a. Cara pertama menggunakan CDN
<script src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-
1.10.20/datatables.min.js"></script>
3. Memanggil DataTable
<script>
$(document).ready( function () {
$('#myTable').DataTable();
} );
</script>
16
2 URI dan Penanganan Form
2.1 URL Helper
A.Konsep URI
URI adalah kependekan dari Uniform Resource Identifier. URI adalah sebuah
tulisan yang akan menunjukkan letak dari suatu dokumen. Sedangkan URL
(Uniform Resource Locator) adalah bentuk khusus dari URI. Berikut ini adalah
beberapa contoh URL:
http://www.ietf.org/rfc/rfc2396.txt
ftp://ftp.is.co.za/rfc/rfc1808.txt
https://www.example.com/
mailto:[email protected]
http://localhost/ci/index.php/berita/edit/1
CodeIgniter merancang URL agar mudah dicari, dan tidak menggunakan query
string standar, tetapi menggunakan pendekatan segmen, sebagai berikut:
http://localhost/ci/index.php/berita/edit/1/2/3
<?php
class berita extends CI_Controller {
public edit($p1, $p2, $p3){
$this->load->helper('form');
$this->load->view('berita/edit');
}
17
Parameter adalah tulisan yang ada didalam kurung setelah nama fungsi. Pada
contoh diatas, parameter adalah $p1, $p2 dan $p3. Atau dapat juga dibuat
parameter sebagai berikut
Pada fungsi edit diatas, terdapat dua parameter yaitu $satu dan $dua. Sehingga
jika terdapat URL seperti diatas, maka parameter pertama $satu akan berisi nilai
1, dan parameter kedua $dua akan berisi nilai 2. Dan nilai 3 dari URL tidak akan
dilakukan proses.
http://localhost/ci/index.php/berita/edit/1/2/3
akan menjadi
http://localhost/ci/berita/edit/1/2/3
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
echo anchor('berita/edit/1','Edit','class="btn"');
18
dengan perintah ini maka akan dihasilkan tag HTML sebagai berikut :
Jika tidak menghasilkan URL seperti diatas maka perlu dilakukan pengaturan URL
seperti pada sub bab 2.2 diatas.
Untuk dapat menggunakan perintah anchor, jangan lupa untuk melakukan load
URL Helper.
$this->load->helper('url');
Sehingga pada table akan ditampilkan link menuju controller berita, fungsi edit.
Tulisan "1" pada perintah diatas, akan digunakan sebagai parameter data yang
akan diambil untuk di koreksi.
Berita/edit/1 untuk id 1
Berita/edit/2 untuk id 2
19
$this->load->view('header',$data);
$this->load->view('berita/edit', $data);
}
A.Elemen form
Form digunakan untuk membungkus berbagai elemen input, seperti text,
password, radio, select, textarea, bahkan juga submit. Sebuah elemen form
memiliki atribut action dan method. Dimana atribut action digunakan untuk
menentukan tujuan pengiriman data, sedangkan atribut method digunakan
menentukan cara mengirim data.
</form>
B.Elemen input
HTML memiliki beberapa elemen input antara lain: text, password, radio, select,
textarea, submit, dan lain-lain. Secara umum setiap elemen input akan memiliki
atribut type, name, dan value. Atribut type digunakan untuk menentukan jenis
elemen input. Atribut name digunakan untuk menentukan nama dari tempat
menampung data. Sedangkan atribut value digunakan untuk menentukan isi
dari data yang akan ditampung oleh atribut name.
Textarea
<textarea name="body">
</textarea> 20
Submit
<input type="submit" value="Submit">
<label>Penulis</label>
<input type="text" name="penulis" value="" /><br>
<label>Berita</label>
<input type="text" name="berita" value="" /><br>
D. Form Helper
Form helper digunakan untuk membantu atau memudahkan dalam membuat
form dan elemen input. Sehingga form helper berisi kumpulan fungsi yang
tugasnya terkait dengan form dan elemen input.
<?php
class berita extends CI_Controller {
public edit(){
$this->load->helper('form');
$this->load->view('berita/edit');
}
Berikut ini adalah contoh file view untuk membuat form seperti pada sub bab 2C.
diatas.
<?php
echo form_open('berita/edit/1');
$data['berita'] = $this->berita_model->get($id);
$this->load->view('header',$data);
$this->load->view('berita/edit', $data);
}
<?php
echo form_open("berita/edit/$berita->id");
22
echo form_input('judulnya',set_value('judulnya',$berita->title));
echo form_input('beritanya',set_value('beritanya',$berita->body));
echo form_input('penulisnya',set_value('penulisnya',$berita->name));
echo form_submit('','Simpan');
echo form_close();
?>
Segmen program diatas akan menghasilkan halaman web yang berisi form. Jika
dilihat pada page source maka akan terlihat script HTML. Script HTML yang
dihasilkan dari view tersebut adalah sebagai berikut
Dari potongan view dan HTML, bagian 'judulnya', 'beritanya', dan 'penulisnya'
akan menjadi bagian dari atribut "name", dan tidak terkait dengan nama field di
table.
1. Form ditampilkan
2. Mengisi form dan menekan tombol submit
3. Jika terdapat kesalahan pada isian atau ada isian yang harus diisi tetapi
kosong, maka form akan ditampilkan kembali termasuk data yang telah
diisikan termasuk pesan kesalahan sesuai kesalahan
4. Proses ini akan terus terjadi sampai isian benar
<?php
echo validation_errors();
echo form_open("berita/edit/$berita->id");
echo form_input('judulnya',set_value('judulnya',$berita->title));
echo form_input('beritanya',set_value('beritanya',$berita->body));
echo form_input('penulisnya',set_value('penulisnya',$berita->name));
echo form_submit('','Simpan');
23
?>
Berdasarkan pada file view edit.php diatas, maka akan dibuatkan modifikasi
fungsi edit pada controller yanga akan menerima dan mengolah data yang
diisikan (controller berita).
if ($this->form_validation->run() == FALSE)
{
$data['berita'] = $this->berita_model->get($id);
redirect('berita');
}
}
Penjelasan Program
$this->load->helper('url');
$this->load->library('form_validation');
Input "judulnya" harus diisi (required), dan jika kosong akan ada pesan
kesalahan "The Judul field is required."
b. Inputan berita
Membuat aturan untuk elemen input yang memiliki atribut name beritanya.
Input "beritanya" harus diisi (required), dan jika kosong akan ada pesan
kesalahan "Berita harus diisi." %s akan diganti dengan isi dari parameter ke-
dua pada set_rules (Berita).
c. Inputan penulis
Input "penulisnya" harus diisi (required), dan jika kosong akan ada pesan
kesalahan "The Nama Penulis field is required."
if ($this->form_validation->run() == FALSE)
Jika data yang diisikan tidak menyalahi semua aturan yang telah dibuat
maka akan dibuka halaman daftar berita.
redirect('berita');
25
2.7 Menyimpan data
Pada CodeIgniter, untuk mengambil data yang berada pada $_POST dapat
dilakukan dengan menggunakan perintah
$this->input->post();
26
action= "berita/edit/1 " Controller berita
method = "post" Functionedit($id)
name = "title"
Judul Berita
$_POS
name = "body" T
"titl Judul Berita
Body Berita Body
Berita Body Berita e"
Body Berita
B.Fungsi edit
Proses menyimpan (update) data dilakukan jika semua inputan telah lolos
validasi. Jika inputan tidak ada yang salah, selanjutnya data dapat disimpan.
Berikut ini adalah perbaikan pada fungsi edit. Terutama setelah validasi sukses :
if ($this->form_validation->run() == FALSE)
{
$data['berita'] = $this->berita_model->get($id);
27
$data['judul'] = 'Ubah Berita';
$this->load->view('header',$data);
$this->load->view('berita/edit', $data);
} else {
$data['title'] = $this->input->post('judulnya');
$data['body'] = $this->input->post('beritanya');
$data['name'] = $this->input->post('penulisnya');
$this->berita_model->simpan($data,$id);
redirect('berita');
}
}
Penjelasan :
$data['title'] = $this->input->post('judulnya');
$data['body'] = $this->input->post('beritanya');
$data['name'] = $this->input->post('penulisnya');
$this->berita_model->simpan($data,$id);
C.Fungsi simpan
Pada berita_model, ditambahkan perintah untuk menyimpan data ke table berita
<?php
class Berita_model extends CI_Model {
Penjelasan:
Parameter pertama adalah $data, yang berisi data array. Data array
tersebut berisi data yang akan disimpan.
Parameter kedua adalah $id, jika tidak diisi maka akan dilakukan insert,
tapi jika diisi maka akan dilakukan koreksi data.
28
2.8 Upload file
Mekanisme kerja dari upload file tanpa CodeIgniter, adalah sebagai berikut:
Pada CodeIgniter, telah ada library upload yang menangai semua hal terkait file
upload.
B.Fasilitas Upload
Untuk menambahkan fasilitas upload pada aplikasi yang sudah dibuat diatas,
maka perlu menambahkan sebuah field (picture) untuk menampung nama file.
$this->load->library('upload', $config);
30
if ( ! $this->upload->do_upload('gambarnya'))
{
$this->form_validation->set_message('cek_upload',
$this->upload->display_errors());
return FALSE;
}
else
{
return TRUE;
}
}
$this->form_validation->set_rules('gambarnya', 'Gambar',
'callback_cek_upload');
if ($this->form_validation->run() == FALSE)
{
$data = array(
'title' => 'My Title',
'judul' => 'My Heading'
);
$data['message'] = 'My Message';
$data['berita'] = $this->berita_model->get($id);
$this->berita_model->simpan($data,$id);
redirect('berita');
}
}
31
B.3 View berita/edit.php
Pada program dibawah ini, memanfaatkan form_helper untuk membuat tampilan
(dapat dibuat menggunakan tag HTML). Terdapat beberapa hal yang perlu
diperhatikan:
form_open_multipart :
form_upload
membuat input dengan atribut Input type="file"
<?php
echo validation_errors();
echo form_open_multipart("berita/edit/$berita->id");
echo form_input('judulnya',set_value('judulnya',$berita->title));
echo form_input('beritanya',set_value('beritanya',$berita->body));
echo form_input('penulisnya',set_value('penulisnya',$berita->name));
echo form_upload('gambarnya');
echo form_submit('','Simpan');
echo form_close();
?>
$this->table->add_row(
$row->id,
$row->title,
$row->body,
$row->picture,
anchor("berita/edit/$row->id",'Edit')
);
C."Extend" Helper
Seperti pada penjelasan sebelumnya, Helper berisi kumpulan fungsi sesuai
dengan kategorinya. Terkadang fungsi yang telah disediakan oleh CodeIgniter,
tidak sesuai dengan harapan. Oleh karena itu CodeIgniter memberikan suatu
kesempatan untuk melakukan perubahan terhadap fungsi yang telah dibuat,
tanpa harus mengubah langsung pada Helper atau fungsi yang asli.
32
• Awalan MY_ dapat diganti dengan tulisan lainnya, tergantung isi
dari variable $config['subclass_prefix'] pada
application/config/config.php
echo form_input('judulnya',set_value('judulnya',$berita->title));
Script HTML tersebut dihasilkan dari fungsi form_input pada form helper yang
ada pada system/helpers/form_helper.php. Apabila dilihat di dalam
form_helper, maka isi dari fungsi form_input adalah sebagai berikut :
Berikut ini adalah contoh penambahan tag HTML dan atribut untuk membuat
isian judulnya.
<div class="form-group">
<label for="judulnya">Judul</label>
<input type="text" name="judulnya" value="Pemrograman Web" class="form-
control" id="judulnya" placeholder="Isikan dengan judul">
</div>
33
Pada script diatas, terlihat adanya penambahan tag HTML <div> dan <label>,
juga atribut class, id, dan placeholder pada tag input. Seandainya untuk
membuat sebuah input harus dilakukan penambahan tag dan atribut maka akan
sangat merepotkan jika terdapat beberapa input.
Perlu diketahui bahwa bentuk penambahan Script HTML diatas adalah format
dari Framework Bootstrap. Untuk Framework Bootstrap dapat dilihat pada link
berikut ini:
(https://getbootstrap.com/docs/4.0/components/forms/).
Untuk mengubah prilaku dari fungsi form_input diatas, maka harus dibuat fungsi
form_input yang baru. Untuk itu perlu dilakukan langkah berikut :
Keterangan:
34
Pada fungsi diatas, terdapat variable $awalan yang berisi bagian sebelum
<input>. Sedangkan variable $extra adalah variable yang akan berisi tambahan
atribut, seperti class, id, dan placeholder.
Jika view edit.php diubah sedikit, dengan menambahkan label diakhir fungsi
form_input sebagai berikut:
echo form_input('judulnya',set_value('judulnya',$berita-
>title),'','Title');
Makan berikut ini adalah tampilan sebelum dan sesudah perubahan fungsi
form_input.
35
3 Session dan Authentikasi
3.1 Konsep dan cara kerja Session
Terdapat dua buah program a.php dan b.php. Didalam file a.php terdapat
perintah untuk mengisi variabel $nama dengan sebuah nilai, kemudian pada file
b.php terdapat perintah untuk menampilkan isi dari variable $nama. Maka saat
program b.php dijalankan yang akan tampil adalah pesan kesalahan, yang
menyatakan bahwa variabel $nama belum diisi. Karena memang variabel
$nama pada kedua program ini tidak saling terkait.
Agar nilai pada variabel $nama yang diisi pada program a.php dapat
ditampilkan pada program b.php maka dapat digunakan variabel session.
Session adalah variabel yang berada di sisi server dan bersifat global. Karena
berada disisi server maka data yang disimpan dapat diakses oleh semua halaman.
36
modul ini akan diatur pada file autoload.php. Dengan memasukkan tulisan
session pada bagian autoload[‘libraries’].
$autoload['libraries'] = array('database','session');
Fungsi Perintah
Memeriksa $this->session->has_userdata('namavariabel');
keberadaan isset( $_SESSION['namavariabel'] );
session
Sedangkan untuk controller selain login, yang perlu dibuat adalah pada fungsi
__construct(). Fungsi __construct() adalah fungsi yang pertama dijalankan pada 37
setiap kelas. Dalam fungsi __construct() akan dilakukan pemeriksaan session
status login, dan jika belum login, maka proses akan diarahkan ke controller
login.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$this->load->view('header',$data);
$this->load->view('login/form');
}
}
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$this->load->library('form_validation');
$this->form_validation->set_rules('username','Username','required',
array('required' => '%snya harus diisi.'));
$this->form_validation->set_rules('password','Password',
'required|callback_cek_password');
if ($this->form_validation->run() == FALSE)
{
$data['judul'] = 'Login Form';
$this->load->view('header',$data);
$this->load->view('login/form');
} else {
//jika username dan password benar
}
$username = $this->input->post('username');
$sessiondata = array(
'username' => $username,
'logged_in' => TRUE
);
$this->session->set_userdata($sessiondata);
redirect('berita');
$this->load->model('user_model');
$result = $this->user_model->get($username);
40
C.Controller login
Selengkapnya isi dari controller login adalah sebagai berikut :
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$this->form_validation->set_rules('username','Username','required',
array('required' => '%snya harus diisi.'));
$this->form_validation->set_rules('password','Password',
'required|callback_cek_password');
if ($this->form_validation->run() == FALSE)
{
$data['judul'] = 'Login Form';
$this->load->view('header',$data);
$this->load->view('login/form');
} else {
$username = $this->input->post('username');
$sessiondata = array(
'username' => $username,
'logged_in' => TRUE
);
$this->session->set_userdata($sessiondata);
redirect('berita');
}
$username = $this->input->post('username');
//$password = $this->input->post('password');
$result = $this->user_model->get($username);
Model user hanya berisi fungsi get, yang akan digunakan oleh controller login,
untuk memeriksa username yang telah diisikan pada form. Karena hanya
mengambil satu data maka yang akan dikembalikan adalah row();
<?php
class user_model extends CI_Model {
public function get($username)
{
$this->db->where('username',$username);
$query = $this->db->get('user');
return $query->row();
}
}
<?php
echo validation_errors();
echo form_open('login');
echo form_input('username',set_value('username'));
echo form_input('password',set_value('password'));
echo form_submit('', 'Login');
echo form_close();
?>
43
4 AJAX (Asyncronous Javascript and
XML)
Bila dilihat dari kepanjangan AJAX, maka dapat dilihat bahwa pembahasan
kedepan akan terkait dengan javascript. Sedangkan untuk XML tidak dibahas
pada modul ini. Secara sederhana XML digunakan sebagai format yang akan
digunakan saat mengirimkan data. Seiring dengan berjalannya perkembangan
javascript, maka format data yang akan digunakan pada modul ini adalah
format JSON. Format JSON lebih mudah digunakan baik dari sisi Javascript
maupun dari sisi PHP.
4.1 Javascript
Javascript adalah sebuah script yang termasuk dalam client side. Artinya
Javascript dapat berjalan di browser tanpa harus ada server. Beberapa contoh
penggunaan javascript adalah bergeraknya jarum detik pada sebuah jam yang
tampil di browser. Atau adanya suatu perubahan pada tampilan tanpa interaksi
dari user.
Pada modul ini akan dijelaskan sekilas tentang javascript, sebagai pengantar
untuk menggunakan jQuery. Karena jQuery adalah hanya sebuah library yang
dibangun menggunakan javascript. Tetapi untuk menggunakan Ajax jika
menggunakan jQuery dibanding hanya menggunakan javascript.
https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/
JavaScript_basics
A.Console
Console adalah adalah sebuah tab yang ada pada developer tool. Pada Chrome
dapat dibuka dengan menekan tombol F12, pilih tab console. Console dapat
digunakan untuk menampilkan kesalahan, tulisan, isi variable, dan lain-lain
untuk membantu dalam pengembangan javascript.
Dimulai dari yang sedikit. Untuk contoh kita akan menambahkan javascript untuk
alamat
44
http://localhost/ci/berita
<script src="/ci/assets/js/main.js"></script>
3. Pada file main.js, buat script berikut (javascript adalah bahasa pemrograman
yang case sensitive):
http://localhost/ci/berita
Setelah dijalankan maka akan terlihat tulisan pada tag H1, yang awalnya
bertuliskan "Daftar Berita", digantikan dengan tulisan "Hello world!". Perintah
querySelector() akan mengambil H1 sebagai objek tujuan, dan menyimpannya
45
pada variable myHeading. Kemudian mengisi "Hello world!" dengan
menggunakan property textContent dari myHeading.
C.Variable
Variable adalah sebuah tempat yang dapat diisi nilai. Sebuah variable harus di
deklarasi dengan memulai dengan kata kunci "var" atau "let", diikuti dengan
nama variable, seperti berikut :
let myNRP;
var myNama;
myNRP = '11223344';
D. Komentar
Komentar atau keterangan dapat dituliskan dalam program javascript, yang
tidak akan diproses oleh browser. Dapat menggunakan
/*
Jika banyak baris
*/
E. Function
Bila terdapat satu atau beberapa baris perintah yang akan digunakan berulang-
ulang dengan sedikit perbedaan, maka dapat dibuat sebuah function. Sehingga
jika diperlukan cukup memanggil nama fungsinya tanpa menulis perintah yang
sama berulang-ulang.
Contoh fungsi yang sudah ditulis diatas dan merupakan fungsi yang sudah ada di
javascript adalah
querySelector()
dan alert()
46
Untuk membuat fungsi sendiri (User Define Function) dapat dilakukan sebagai
berikut, (dapat di coba di console)
function multiply(angka1,angka2) {
let result = angka1 * angka2;
return result;
}
multiply(3,4);
multiply(5,5);
F. Events
Interaksi pada website akan diatur pada event handler. Event handler adalah
struktur pemrograman yang akan menangkap kejadian yang terjadi pada
browser, dan menjalankan perintah sebagai respon. Contoh yang paling sering
adalah event klik. Tulis perintah berikut di console, kemudian klik halaman web.
document.querySelector('html').onclick = function() {
alert('Ouch! Stop poking me!');
}
Pada contoh diatas, event click di tempelkan pada html. Artinya semua element
diantara tag html di klik maka akan dijalankan perintah alert.
4.2 jQuery
Seperti telah dijelaskan diatas, bahwa jQuery adalah hanya sebuah library, dan
bukan sebuah bahasa pemrograman. Jadi cara kerja pengembangan aplikasi
pada jQuery sama seperti membuat aplikasi javascript.
<script src =
"https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">
Nama file jquery.min.js, adalah bentuk ukuran file kecil dari jquery, yang isinya
sama dengan jquery.js.
47
Jika di download, maka cara memanggil library adalah sebagai berikut :
<script src="assets/js/jquery.min.js"></script>
A.Syntax
Aturan penulisan dasar dari jQuery adalah sebagai berikut :
$(selector).action()
jQuery(document).ready(function() {
// do stuff when DOM is ready
});
$(document).ready(function() {
// do stuff when DOM is ready
});
Maksud perintah diatas adalah pilih bagian document, jika sudah siap (semua isi
dari dokumen sudah di download) maka jalankan perintah dalam fungsi.
$(function() {
// do stuff when DOM is ready
});
B.Selector
Selector pada jQuery digunakan untuk menentukan element HTML yang akan di
manipulasi. Selector selalu ditulis didalam kurung setelah $.
48
$("input[name='nrp']") : memilih semua elemen HTML <input> yang memiliki
atribut name berisi nrp, seperti <input type="text" name="nrp">
atau <input type="hidden" name="nrp">
C.Event
Semua aksi yang diberikan oleh user dan akan direspon oleh web browser.
Sebuah event mewakili suatu saat ketika terjadi sesuatu. Contohnya:
menggerakkan mouse diatas sebuah elemen, memilih radio button, klik sebuah
elemen, dll.
Untuk membuat perintah "jika paragraph di klik" maka ditulis sebagai berikut :
$("p").click();
Kemudian untuk menentukan apa yang akan dilakukan jika p di klik dituliskan
dalam function
$("p").click(function(){
// action goes here!!
});
Contoh :
$("p").click(function(){
$("p").hide();
});
Contoh program diatas akan menghilangkan semua elemen p saat ada elemen
p yang di klik. Contoh berikut hanya menghilangkan elemen p yang di klik,
elemen p yang lain (yang tidak di klik) tidak hilang).
$("p").click(function(){
$("this").hide();
});
D. Effect
Efek adalah perintah untuk melakukan sesuatu, seperti pada contoh sebelumnya
efek hide(). Selain hide(), juga ada show(), dan toggle().
dan animate().
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<button id="hide">Hide</button>
<button id="show">Show</button>
</body>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></
script>
<script>
$(document).ready(function(){
$("#hide").click(function(){
$("p").hide();
});
$("#show").click(function(){
$("p").show();
});
});
</script>
</html>
Silahkan lakukan eksperimen untuk efek yang lain. Cari cara penggunaan
perintah efek yang lainnya.
E. Callback
Fungsi callback adalah menjalankan perintah selanjutnya setelah perintah
sebelumnya selesai dijalankan. Perintah javascript akan dijalankan baris per
baris dari atas kebawah. Tetapi dengan menggunakan efek, baris berikutnya
akan dijalankan walaupun efek belum selesai dilakukan. Hal ini akan memicu
masalah. Untuk mencegah hal ini terjadi maka digunakan callback.
Berikut ini contoh dua perintah tanpa callback, hide dan alert. Pada contoh
dibawah ini alert akan ditampilkan walaupun proses hide belum selesai.
$("button").click(function(){
$("p").hide(1000);
alert("The paragraph is now hidden");
});
50
Cara menulis callback adalah sebagai berikut :
$(selector).hide(speed, callback);
Contoh :
$("button").click(function(){
$("p").hide("slow", function(){
alert("The paragraph is now hidden");
});
});
Contoh :
https://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_dom_html_get
$(document).ready(function(){
$("#btn1").click(function(){
alert("Text: " + $("#test").text());
});
$("#btn2").click(function(){
alert("HTML: " + $("#test").html());
});
});
Jika #btn1 ditekan maka akan menghasilkan : Text: This is some bold text in a
paragraph.
Jika #btn2 ditekan maka akan menghasilkan : HTML: This is some <b>bold</b>
text in a paragraph.
https://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_dom_html_set
$(document).ready(function(){
$("#btn1").click(function(){
$("#test1").text("Hello world!");
});
$("#btn2").click(function(){
$("#test2").html("<b>Hello world!</b>");
});
$("#btn3").click(function(){
51
$("#test3").val("Dolly Duck");
});
});
tulisan pada id test1 akan diganti tulisan Hello world saat #btn1 diklik.
Dan saat tombol #btn2 diklik maka tulisan pada #test2 akan diganti
dengan tulisan "hello world!" yang tebal.
Sedangkan saat tombol #btn3 di klik maka isi dari form yang memiliki
#test3 akan diganti dengan tulisan "Dolly Duck".
G. Traversing
Traversing maksudnya adalah mencari atau melalui sebuah elemen. Jika
terdapat script HTML sebagai berikut:
<div>
<ul>
<li>
<span>Nomer</span>
<span>Satu</span>
</li>
<li>
<b>Penting</b>
</li>
</ul>
</div>
H. Ajax
Seperti judul sub bab ini, bahwa kepanjangan dari ajax adalah asyncronous
javascript and xml. Seluruh proses download file HTML adalah syncronous
artinya sekali file diminta maka seluruh isi file akan didownload dan akan
ditampilkan.
Kita sering melihat setelah proses download selesai, seolah-olah masih ada
proses yang terjadi setelah itu.
52
Contoh pada facebook, terdapat proses yang terjadi setelah seluruh halaman di
load. Proses tersebut adalah proses menunggu load notification. Proses
tersebut menggunakan ajax, karena setelah seluruh halaman di load, maka
halaman akan menjalankan perintah ajax untuk mengambil data.
53
Gambar 4.4 meminta data tambahan
Keterangan
panah no. 2 : seluruh halaman akan ditampilkan (lihat Gambar 4 .4 sisi sebelah
kiri)
panah no. 3 : setelah tombol 3 ditekan maka akan dilakukan pengambilan data
lagi ke server
panah no. 4 : data yang dikirim dari server (tulisan merah) akan ditampilkan
pada form (tulisan merah)
H.1 Post
Perintah post adalah salah satu perintah yang dapat digunakan untuk melakukan
ajax (meminta data). Perintah ini akan meminta data ke server dengan
menggunakan metode request HTTP POST. Aturan penulisan untuk perintah post
adalah sebagai berikut:
$(selector).post(URL,data,function(data,status,xhr),dataType)
Parameter Description
URL Harus diisi. Menentukan tujuan permintaan data
data Optional. Menentukan data yang akan dikirim ke server
function(data,status,x Optional. Fungsi merupakan callback yang akan
hr) dijalankan jika permintaan sukses didapatkan.
parameters:
data – berisi data hasil dari server
status – berisi status hasil
xhr – berisi object XMLHttpRequest
dataType Optional. Menentukan tipe data hasil yang diinginkan.
xml,html,text,script,json,jsonp
Contoh :
54
$(document).ready(function(){
$("input[name='penulisnya']").blur(function(){
$.post("/ci/berita/get_author",
{ the_author: $(this).val() },
function(data, status){
$.each(data, function(index, elemen){
$("ul").append('<li>'+elemen.title+'</li>');
});
},
"json"
);
});
});
Keterangan:
Script diatas
Berikut ini adalah isi dari file view edit.php secara lengkap:
<?php
echo validation_errors();
echo form_open_multipart("berita/edit/$berita->id");
echo form_input('judulnya',set_value('judulnya',$berita-
>title),'','Title');
echo form_input('beritanya',set_value('beritanya',$berita-
>body),'','Body');
echo form_input('penulisnya',set_value('penulisnya',$berita-
>name),'','Author');
echo form_upload('gambarnya');
echo form_submit('','Simpan');
echo form_close();
?>
<h2> Daftar Judul</h2>
<ul></ul>
</div>
</body>
<script src="/ci/assets/js/main.js"></script>
</html>
H.2 Get_author
Fungsi get_author pada controller berita akan dipanggil oleh fungsi ajax pada
H.1. Isi dari fungsi get_author adalah sebagai berikut :
55
public function get_author(){
$title = $this->input->post('the_author');
$result = $this->berita_model->get_like($title);
echo json_encode($result);
}
Fungsi ini bertugas meminta data pada berita model, dan mengembalikan data
yang didapat dalam format data json. Data dalam format json akan digunakan
oleh ajax (sub bab H.1)
56
5 Template
5.1 Template Parser
CodeIgniter memilik sebuah fasilitas untuk template parser, walaupun hanya
sederhana. Karena diluar sana telah banyak template parser khusus seperti
twig, smarty, dan lain-lain.
Materi ini hanya sebagai pengenalan tentang adanya template parser. Sehingga
jika nanti akan mempelajari template parser lain, sudah memiliki gambaran.
<?php
$this->load->library('parser');
$data = array(
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading',
'blog_entries' => array(
array('title' => 'Title 1', 'body' => 'Body 1'),
array('title' => 'Title 2', 'body' => 'Body 2'),
array('title' => 'Title 3', 'body' => 'Body 3'),
array('title' => 'Title 4', 'body' => 'Body 4'),
array('title' => 'Title 5', 'body' => 'Body 5')
)
);
$this->parser->parse('blog_template', $data);
<html>
<head>
<title>{blog_title}</title>
</head>
<body>
<h3>{blog_heading}</h3>
{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>
Maka semua tulisan yang ada didalam kurung akan diganti dengan isi dari
variable dengan nama yang sama, dan hasilnya menjadi sebagai berikut :
57
<html>
<head>
<title>My Blog Title</title>
</head>
<body>
<h3>My Blog Heading</h3>
<h5>Title 1</h5>
<p>Body 1</p>
<h5>Title 2</h5>
<p>Body 2</p>
<h5>Title 3</h5>
<p>Body 3</p>
<h5>Title 4</h5>
<p>Body 4</p>
<h5>Title 5</h5>
<p>Body 5</p>
</body>
</html>
1. Tidak perlu lagi melakukan <?php echo $nama_variable; ?> atau <?=
$nama_variable; ?>
2. Penggunaan perintah perulangan untuk menampilkan data yang banyak
lebih mudah
<?php
$this->load->library('parser');
$this->parser->set_delimiters('{{','}}');
}
$data['berita'] = $this->berita_model->get();
$this->parser->parse('new_header',$data);
$this->parser->parse('berita/view', $data);
$this->parser->parse('new_footer',$data);
}
Pada contoh diatas, pada function __construct di siapkan terlebih dahulu library
parser. Kemudian mengubah simbol untuk variable yang diganti digunakan
simbol {{ }}. Kemudian pada function index untuk menampilkan digunakan
perintah $this->parser->parse, bukan lagi menggunakan $this->load->view.
Jika dilihat pada file view.php, tidak terlihat perintah perulangan untuk
menampilkan semua baris. Tetapi diganti dengan menggunakan {{berita}} dan
{{/berita}}. Dan semua {{ }} didalam atau diantara {{berita}} dan
{{/berita}} akan diulang-ulang untuk semua data atau baris atau record yang
ada didalam data berita.
Akhirnya jika menggunakan teknik ini, maka tidak dapat menggunakan library
Table, seperti sebelumnya.
5.2 Bootstrap
Sebelumnya pada sub bab sebelumnya, penggunaan bootstrap juga pernah
dibahas sedikit pada sub bab 2C.2 tentang "Extend" Form Helper.
59
Bootstrap adalah sebuah framework CSS, yang artinya sebuah kumpulan CSS
atau Javascript yang akan mengatur tampilan atau efek pada tampilan. Dengan
menggunakan framework CSS, yang perlu dilakukan adalah menyesuaikan
format html sesuai framework, dan menuliskan class yang akan digunakan.
Untuk kasus pada program, akan digunakan CDN untuk menggunakan bootstrap.
A.1 Grid
Untuk mengatur sebuah halaman, bootstrap menggunakan teknik kolom.
Sebuah halaman akan dibagi menjadi 12 kolom.
Contoh :
<div class="container">
<div class="row">
<div class="col-sm">
One of three columns
</div>
<div class="col-sm">
One of three columns
</div>
<div class="col-sm">
One of three columns
</div>
</div>
</div>
Maksud dari skrip diatas adalah jika lebar alat lebih besar 576px maka tampilan
akan menjadi 3 (tiga) kolom.
60
Jika lebar alat kurang dari 576px maka tampilan akan menjadi 1 kolom, sebagai
berikut :
Jika ingin membuat lebar kolom yang berbeda, maka dapat ditambahkan lebar
yang diinginkan dengan total 12 kolom, sebagai berikut:
<div class="container">
<div class="row">
<div class="col-md-2">
1 of 3
</div>
<div class="col-md-6">
Variable width content
</div>
<div class="col-md-4">
3 of 3
</div>
</div>
</div>
Striped rows
Bordered table
Borderless table
Hoverable rows
Small table
61
Contoh pada kasus yang telah dibuat, akan ditambahkan aturan bootstrap pada
table. Untuk menggunakan, dapat diterapkan pada file view.php.
B.2 Button
Untuk membuat tampilan tombol, bootstrap telah menyediakan class "btn".
Berikut ini class untuk memberikan perbedaan warna tombol :
https://datatables.net/examples/styling/bootstrap4
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Berita</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css
">
<!-- jQuery library -->
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></
script>
<!-- Popper JS -->
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min
.js"></script>
<!-- Latest compiled JavaScript -->
62
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"><
/script>
<script type="text/javascript"
src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap4.min.js"></
script>
</head>
63
Pada tampilan tersebut, terlihat terdapat warna berbeda pada judul table
(thead). Kemudian terdapat warna yang berbeda antara baris genap dan ganjil
(table-striped). Disekeliling table terdapat garis batas (table-bordered). Dan jika
mouse diarahkan pada baris dibawah judul, maka akan terlihat berubah warna.
C.Bootstrap Example
Bootstrap juga telah memiliki contoh tampilan yang dapat digunakan. Untuk
download contoh yang ada pada bootstrap dapat dibuka pada halaman web
berikut :
https://github.com/twbs/bootstrap/releases/download/v4.5.0/bootstrap-4.5.0-
examples.zip
Contoh tampilan yang akan digunakan adalah ada pada folder dashboard.
Lakukan modifikasi lokasi file untuk css dan javascript pada file tersebut.
Beberapa yang perlu di modifikasi adalah
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
if ($this->session->logged_in == FALSE){
redirect('login');
}
65
$this->load->model('berita_model');
$this->load->helper('url');
$this->load->theme('demo');
$this->load->library('parser');
$this->parser->set_delimiters('{{','}}');
}
Berikut ini adalah gambaran dari bagian header (merah), content (biru), dan
footer (tidak terlihat).
66
Secara skrip, maka berikut ini adalah gambaran bagian header (merah), content
(biru) dan footer (hijau):
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap
contributors">
<meta name="generator" content="Jekyll v4.0.1">
<title>Dashboard Template · Bootstrap</title>
<link rel="canonical"
href="https://getbootstrap.com/docs/4.5/examples/dashboard/">
<style>
.bd-placeholder-img {
font-size: 1.125rem;
text-anchor: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
<div class="container-fluid">
<div class="row">
<nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-light
sidebar collapse">
<div class="sidebar-sticky pt-3">
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link active" href="#">
<span data-feather="home"></span>
Dashboard <span class="sr-only">(current)</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<span data-feather="file"></span>
Orders
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<span data-feather="shopping-cart"></span>
Products
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<span data-feather="users"></span>
Customers
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<span data-feather="bar-chart-2"></span>
Reports
</a>
</li>
<li class="nav-item">
68
<a class="nav-link" href="#">
<span data-feather="layers"></span>
Integrations
</a>
</li>
</ul>
<h2>Section title</h2>
<div class="table-responsive">
<table class="table table-striped table-sm">
<thead>
<tr>
<th>#</th>
<th>Header</th>
<th>Header</th>
<th>Header</th>
<th>Header</th>
</tr>
</thead>
<tbody>
<tr>
<td>1,001</td>
<td>Lorem</td>
<td>ipsum</td>
<td>dolor</td>
<td>sit</td>
</tr>
<tr>
<td>1,002</td>
<td>amet</td>
<td>consectetur</td>
<td>adipiscing</td>
<td>elit</td>
</tr>
<tr>
<td>1,003</td>
<td>Integer</td>
<td>nec</td>
<td>odio</td>
<td>Praesent</td>
</tr>
<tr>
<td>1,003</td>
<td>libero</td>
<td>Sed</td>
<td>cursus</td>
<td>ante</td>
</tr>
<tr>
<td>1,004</td>
<td>dapibus</td>
<td>diam</td>
<td>Sed</td>
<td>nisi</td>
</tr>
<tr>
<td>1,005</td>
<td>Nulla</td>
<td>quis</td>
<td>sem</td>
<td>at</td>
70
</tr>
<tr>
<td>1,006</td>
<td>nibh</td>
<td>elementum</td>
<td>imperdiet</td>
<td>Duis</td>
</tr>
<tr>
<td>1,007</td>
<td>sagittis</td>
<td>ipsum</td>
<td>Praesent</td>
<td>mauris</td>
</tr>
<tr>
<td>1,008</td>
<td>Fusce</td>
<td>nec</td>
<td>tellus</td>
<td>sed</td>
</tr>
<tr>
<td>1,009</td>
<td>augue</td>
<td>semper</td>
<td>porta</td>
<td>Mauris</td>
</tr>
<tr>
<td>1,010</td>
<td>massa</td>
<td>Vestibulum</td>
<td>lacinia</td>
<td>arcu</td>
</tr>
<tr>
<td>1,011</td>
<td>eget</td>
<td>nulla</td>
<td>Class</td>
<td>aptent</td>
</tr>
<tr>
<td>1,012</td>
<td>taciti</td>
<td>sociosqu</td>
<td>ad</td>
<td>litora</td>
</tr>
<tr>
<td>1,013</td>
<td>torquent</td>
<td>per</td>
<td>conubia</td>
<td>nostra</td>
</tr>
<tr>
<td>1,014</td>
<td>per</td>
71
<td>inceptos</td>
<td>himenaeos</td>
<td>Curabitur</td>
</tr>
<tr>
<td>1,015</td>
<td>sodales</td>
<td>ligula</td>
<td>in</td>
<td>libero</td>
</tr>
</tbody>
</table>
</div>
</main>
</div>
</div>
<!-- jQuery library -->
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></
script>
<script src="/ci/assets/dist/js/bootstrap.bundle.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/feather-icons/4.9.0/feather.min
.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js"></
script>
<script src="/ci/assets/js/dashboard.js"></script></body>
</html>
Bagian header (merah) berisi skrip mulai baris awal, skrip navigasi, hingga
skrip judul konten akan dimasukkan ke file new_header.php.
Sedangkan bagian konten (biru) akan disesuaikan dengan keperluan
(tidak diambil).
Bagian footer (hijau) berisi penutup, dan script untuk mengambil eksternal
javascript akan dimasukkan ke file new_footer.php.
$data = array(
//'title' => 'My Title',
72
'judul' => 'My Heading'
);
$data['message'] = 'My Message';
$data['berita'] = $this->berita_model->get();
$data['judul'] = 'Daftar Berita';
$this->parser->parse('new_header',$data);
$this->parser->parse('berita/view', $data);
$this->load->view('new_footer',$data);
}
Untuk meringkas cara diatas, dapat dibuat library baru yang bertugas
menampilkan data. Libarary baru dibuat pada folder application/libraries.
Nama file library adalah template.php (sesuai nama class). Berikut ini adalah
isi dari template.php:
<?php
class Template{
protected $_ci;
function __construct(){
$this->_ci = &get_instance();
$this->_ci->load->library('parser');
$this->_ci->parser->set_delimiters('{{','}}');
}
Berikut ini adalah isi dari controller (berita) jika menggunakan library template.
<?php
class berita extends CI_Controller {
public function __construct()
{
parent::__construct();
if ($this->session->logged_in == FALSE){
redirect('login');
}
$this->load->model('berita_model');
$this->load->helper('url');
$this->load->library('template');
}
$this->template->view('berita/view', $data);
}
74
6 Web Desain
75