Showing posts with label CodeIgniter. Show all posts
Showing posts with label CodeIgniter. Show all posts

Menampilkan Format Tanggal Indonesia di CodeIgniter 4

5:11 AM Add Comment
Menampilkan Format Tanggal Indonesia di CodeIgniter 4

Pada saat kita meninputkan data kedalam database kita sering kali mendapatkan tanggal berformat Inggris, karena memang default dari databasenya tanggal yang bertipe Inggris. contoh saja pada fungsi date('Y-m-d') maka akan menampillkan tangal saat ini, contoh 2021-10-03. Meskipun format tanggal tersebut tidak akan mempengaruhi sistem yang akan buat, tetapi tentu akan sangat berpengaruh ketika kita membuat sebuah sistem laporan yang pastinya harus menggunakan format Indonesia karena sesuai Negara kita sendiri.

Baca juga Cara memasang jQuery di CodeIgniter

Pada tutorial kali ini saya akan memberikan tutorial tentang cara mengubah format tanggal default ke format tanggal Indonesia. Untuk lebih mudahnya dalam pemanggilan fungsi format tanggal Indonesia ini, saya akan masukan fungsi untuk merubah format tersebut kedalam Helper CodeIgniter yang nantinya akan kita panggil di Controller.

Pertama buat sebuah helper dengan script seperti dibawah, lalu simpan script tersebut di folder app/Helpers dan simpan dengan nama ConvertTgl.php.

<?php


namespace App\Helpers;


class ConvertTgl

{

    public function get_tgl($tgl)

    {

        $bulan = [

            1 =>   'Januari',

            'Februari',

            'Maret',

            'April',

            'Mei',

            'Juni',

            'Juli',

            'Agustus',

            'September',

            'Oktober',

            'November',

            'Desember'

        ];

        $pecah_tgl = explode('-', $tgl);

        $tgl_indo = $pecah_tgl[2] . ' ' . $bulan[(int)$pecah_tgl[1]] . ' ' . $pecah_tgl[0];

        return $tgl_indo;

    }

}

Setelah selesai membuat Helper kita akan panggil Helper ConvertTgl tersebut di controller. Disini kita buat Controller dengan nama TesConvertTgl.php

<?php


namespace App\Controllers;


use App\Helpers\ConvertTgl;


class TesConvertTgl extends BaseController

{

    protected $ConvertTgl;

    public function __construct()

    {

        $this->ConvertTgl = new ConvertTgl();

    }

    public function index()

    {

return $this->ConvertTgl->get_tgl(date('Y-m-d'));

    }

}

Maka output yang akan ditampilkan seperti di bawah ini :

10 Oktober 2021

Itulah tutorial tentang cara menampilkan format tanggal Indonesia di CodeIgniter 4, semoga artikel ini bermanfaat. Jika anda ada kesulitan dalam penulisan kode silahkan tinggalkan komentar, jangan sungkan. Terimakasih.


SOURCE CODE APLIKASI E-SKRIPSI DENGAN CODEIGNITER

10:09 PM Add Comment

Halo teman - teman . Kali ini saya akan menerbitkan aplikasi yang sangat bagus yaitu aplikasi E-Skripsi yang dibuat dengan framework CodeIgniter. Aplikasi ini bisa di pakai untuk keperluan skripsi di kampus. mulai dari mencari daftar skripsi, menginput skripsi,dan memberi nilai skripsi .


pengguna bisa juga mengunduh skripsi untuk dilihat lihat dan dijadikan bahan referensi. aplikasi ini mendukung 3 user .

Administrator

  • Mengelola data operator
  • Mengelola data kaprodi
  • Mengelola data mahasiswa
  • Mehilat dan menunduh kumpulan skripsi

Ka Prodi

  • Cek Skirpsi ( Meninput Nilai dan Lihat Skripsi )
  • Mehilat dan menunduh kumpulan skripsi

Mahasiswa

  • Kirim Skripsi
  • Melihat Nilai Skripsi
  • Mehilat dan menunduh kumpulan skripsi
Halaman Login

Halaman Admin

Halaman Ka Prodi

Halaman Mahasiswa



Demo berbasis Video 


Itulah penjelasan Aplikasi E-Skripsi dengan Codeigniter.Untuk mendapatkan source code Aplikasi E-Skripsi dengan Codeigniter cukup berdonasi Rp. 100.000,-  bisa hubungi : WA ( +6288218091501 ) . 


Baiklah sampai jumpa


Source Code Aplikasi Reservasi Hotel Berbasis Web dengan PHP ( Codeigniter )

1:47 AM Add Comment

Halo teman teman . Kali ini saya akan menerbitkan aplikasi yang sangat bagus yaitu sistem informasi reservasi hotel. Aplikasi ini bisa di pakai untuk keperluan reservasi hotel mulai dari transaksi reservasi hotel, mengelola kamar - kamar, hingga laporan reservasi hotel .


Di dalam aplikasi ini mendukung 2 user .

Administator

  • Mengelola data type kamar
  • Mengelola data klamar
  • Mengelola data jenis pembayaran
  • Mengelola data layanan extra
  • Mengelola data discount 
  • Mengelola data reservasi
  • Mengelola laporan reservasi
  • Mengelola laporan sisa kamar
  • Dan lain lain.
Client
  • Halaman Home 
  • Type Kamar
  • Reservasi Hotel
  • List Reservasi
  • Laporan Reservasi 

halaman login

Registrasi Client

Dasboard Admin

Mengelola Tipe kamar (admin)

Mengelola kamar (admin)

Mengelola Jenis Pembayaran (admin)

Mengelola layanan Extra  (admin)

Tambah Data Discount (admin)

mengelola data reservasi (admin)

Laporan reservasi (admin)

Laporan sisa kamar (admin)

PDF Laporan sisa kamar (admin)

PDF Laporan reservasi (admin)

Halaman Home client

Penjelasan tipe - tipe kamar client

history payment reservasi client

laporan reservasi client



Demo berbasi video 



Itulah penjelasan sistem informasi reservasi hotel berbasis web menggunakan PHP ( Codeigniter ).Untuk mendapatkan source code sistem informasi reservasi hotel PHP ( Codeigniter ) cukup berdonasi Rp. 100.000,-  bisa hubungi : WA ( +6288218091501 ). 

Baiklah sampai jumpa 

Menampilkan Query Terakhir Menggunakan CodeIgniter

9:00 AM Add Comment

Logo Codeigniter


Untuk menampilkan query terakhir (bukan hasil query) yang telah dijalankan pada framework CodeIgniter, dengan menggunakan perintah $this->db->last_query().

Contoh Penggunaan :
File Model : (/application/models/my_model.php):
<?php if(! defined('BASEPATH'))exit('No direct script allowed access');

Class My_Model extends CI_Model{
function __construct(){
parent::__construct();
}
function get_last_query()
    {
        $query = $this->db->get('my_table', 2);
return $this->db->last_query(); // Return Last Query
    }
}
?>

File Controller : (/application/controllers/test.php):
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Test extends CI_Controller {
public function index()
{
$this->load->model('my_model','my');
echo $this->my->get_last_query();
}
}
?>

Output : 
SELECT * FROM (`my_table`) LIMIT 2

PHP Error encountered when running Command Line using CodeIgniter 2.xx

9:00 PM Add Comment
Logo CI

Kita mungkin pernah mengalami error "A PHP Error was encountered" saat saat menjalankan script PHP menggunakan CodeIgniter CLI (command-line interface) melalui command line windows (CMD)
<div>
<h4>A PHP Error was encountered</h4>
<p>Severity: Notice</p>
<p>Message: Undefined index: REMOTE_ADDR</p>
<p>Filename: core/Input.php</p>
<p>Line Number: 352</p>

</div><div>
<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message: Cannot modify header information - headers already sent by (output started at d:\xampp\htdocs\projects\ci\system\core\Exceptions.php:186)</p>
<p>Filename: libraries/Session.php</p>
<p>Line Number: 689</p>

</div>
Baca juga Menampilkan data crud tabel dari database codeigniter  
Untuk mengatasi hal ini, caranya mudah sekali, cukup ganti $_SERVER['REMOTE_ADDR'] dengan $this->server('remote_addr') pada baris script 352 (sesuai pesan error yang muncul) file "Input.php" (lokasi file ada di path: /system/core/Input.php)

File Input.php baris 352 (sebelum dimodifikasi)

File Input.php baris 352 (setelah dimodifikasi)


Semoga bermanfaat. ;-)

Cara Membuat CRUD AJAX CodeIgniter (Penjelasan + jQuery + Material Dashboard) Lengkap

5:09 AM Add Comment
Codeigniter

Pada Aplikasi web, didalamnya pasti tidak terlepas dari manajemen data. Manajemen tersebut berupa menampilkan, menambah, mengedit, dan menghapus data (CRUD)

Pada artikel sebelumnya, kita sudah belajar mengenai dasar-dasar bagaimana cara membuat halaman CRUD database. Baca: Menampilkan data (CRUD) dari database. Pada artikel ini kita akan belajar membuat CRUD database didalam template Material Dashboard dan menggunakan sistem AJAX, yang berarti melakukan aktifitas CRUD tanpa refresh halaman.

Ajax adalah singkatan dari Asynchronous Javascript And Xmlhttp. Ajax dapat membuat request dan mendapatkan response dari belakang layar (background process) tanpa melakukan refresh pada halaman. 

Download source code ada dibawah.

Pada artikel ini, kita akan membuat halaman CRUD seperti berikut:




Menyiapkan Project

  • Menyiapkan Database
    • Masuk ke PhpMyAdmin, buat database dan tabelnya seperti berikut.
      (nama database: perpustakaandb)
    • Isi tabel tersebut, 1 atau 2 buah data, Isi kolom data terserah anda
  • Mengkonfigurasi Project CI
    • Kita akan menggunakan templating yang sudah dibuat pada artikel sebelumnya.
    • Ganti nama foldernya, (pada artikel ini kita namai "ciajax")
    • Buka file config.php pada application/config, rubah isi base_url menjadi alamat yang benar (localhost/ciajax)
    • Tambahkan library database pada application/config/autoload.php


    • Masih pada folder yang sama, buka database.php, isi parameter database sesuai dengan database yang telah kita buat



Membuat Model


  • Buka folder application/models, buat file bernama BukuModel.php. Isikan dengan kode berikut: 

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

class BukuModel extends CI_Model {
 public $table = 'buku';
  
 public function show($limit, $offset)
 {
  $query = $this->db->get($this->table, $limit, $offset);
  $data['object'] = $query->result();
  $data['array'] = $query->result_array();
  $data['count'] = $query->num_rows();
  return $data;
 }

 public function single($id)
 {
  $query = $this->db->get_where($this->table, array('id' => $id));
  $data['object'] = $query->row();
  $data['array'] = $query->row_array();
  $data['count'] = $query->num_rows();
  return $data;
 }

 public function insert($data)
 {
  return $this->db->insert($this->table, $data);
 }

 public function update($data, $id)
 {
  return $this->db->update($this->table, $data, array('id' => $id));
 }

 public function delete($id)
 {
  return $this->db->delete($this->table, array('id' => $id));
 }
}

/* End of file BukuModel.php */
/* Location: ./application/models/BukuModel.php */
?>

Penjelasan

  1. Model  ini memuat fungsi dasar CRUD seperti
    show untuk menampilkan data banyak
    single untuk menampilkan 1 data
    insert, update dan delete
  2. Pada method model show() dan single(), nilai kembalian dari method tersebut berupa array yang juga memuat count atau jumlah data.


Membuat Tampilan
  • Membuat controller
    • Buat controller Data.php, kemudian buat method buku() 
    • Sesuai dengan artikel sebelumnya, tetapkan elemen dinamisnya dan load view ke data/buku/list.php. Source Code Method seperti berikut:

 public function buku()
 {
  // Judul
  $data['ui_app_name'] = 'Perpus-Sys';
  $data['ui_title'] = 'Perpus-Sys - Data Buku';

  // CSS & JS
  $data['ui_css'] = array('custom/css/default.css');
  $data['ui_js'] = array();

  // Navigasi
  $data['ui_sidebar_nav'] = array(
   'Data|book' => array(
    'Data Buku|book|' .site_url('data/buku'),
    'Data Siswa|face|#',
   )
  );
  $data['ui_sidebar_active'] = 'Data|Data Buku';
  $data['ui_top_nav'] = array(
   'Buku|book|' .site_url('data/buku'),
   'Pegawai|face|#'
  );
  $data['ui_top_nav_active'] = 'Buku';
  $this->load->view('data/buku/list', $data);
 }

  • Membuat view
    • Pada folder application/views buat file list.php dan letakkan pada folder data/buku/list.php
    • Pada artikel sebelumnya, sudah dijelaskan bahwa struktur utama UI view seperti berikut, copy code berikut kedalam file view anda

<?php $this->view('template/header.php')?>
<?php $this->view('template/navigation.php')?>

<!-- KONTEN UTAMA DISINI -->

<?php $this->view('template/js_script.php') ?>
<script type="text/javascript">

//  Kode Javascript jQuery disini

</script>
<?php $this->view('template/footer.php')?>

    • Kita buat tampilan UI pada konten utama, isikan kode view html bootstrap berikut pada bagian konten

<div class="row">
  <div class="col-sm-12">
    <div class="card mb-0">
      <div class="card-body pt-0">
        <form>
          <div class="row justify-content-center">
            <div class="col-2 col-sm-auto">
              <div class="form-group mb-0 pb-0" style="margin-top: 20px">
                <button id="filter-previous_page" class="btn btn-white btn-round btn-just-icon" type="button" data-toggle="tooltip" data-placement="top" title="Halaman sebelumnya">&laquo;</button>
              </div>
            </div>
            <div class="col-4 col-sm-1 pr-0">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Page</label>
                <input type="number" id="filter-page" class="form-control" data-toggle="tooltip" title="Halaman maksimum: 42" value="1">
              </div>
            </div>
            <div class="col-4 col-sm-1 pl-0">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Limit</label>
                <input type="number" id="filter-limit" class="form-control" value="50">
              </div>
            </div>
            <div class="col-2 col-sm-auto pl-0">
              <div class="form-group mb-0 pb-0" style="margin-top: 20px">
                <button id="filter-next_page" class="btn btn-white btn-round btn-just-icon" type="button" data-toggle="tooltip" data-placement="top" title="Halaman selanjutnya">&raquo;</button>
              </div>
            </div>
            <div class="col-9 col-sm-4 pr-0">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Cari Judul Buku</label>
                <div class="input-group">
                  <input type="text" id="filter-cari" class="form-control">
                </div>
              </div>
            </div>
            <div class="col-auto pl-0 col-sm-auto">
              <div class="form-group mb-0 pb-0" style="margin-top: 20px">
                <button class="btn btn-white btn-round btn-just-icon" type="button" data-toggle="tooltip" data-placement="top" title="Halaman selanjutnya">
                  <i class="material-icons">search</i>
                </button>
              </div>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>
<div class="row">
  <div class="col-sm-12">
    <div class="card">
      <div class="card-header card-header-tabs card-header-primary">
        <div class="nav-tabs-navigation">
          <div class="nav-tabs-wrapper">
            <h4 class="card-title nav-tabs-title">Data Buku</h4>
            <ul class="nav nav-tabs justify-content-end">
              <li class="nav nav-item">
                <a class="nav-link" href="#" data-toggle="modal" data-target="#modal-tambah_buku">
                  <i class="material-icons">add</i>
                  Tambah Buku
                </a>
              </li>
            </ul>
          </div>
        </div>
      </div>
      <div class="card-body">
        <div class="table-responsive">
          <table class="table table-striped table-hover">
            <thead class="text-primary">
              <tr>
                <th>No</th>
                <th>Judul</th>
                <th>Pengarang</th>
                <th>Penerbit</th>
                <th>Tahun</th>
                <th>Jumlah Buku</th>
                <th>Jumlah Eksemplar</th>
                <th>Kategori</th>
                <th></th>
              </tr>
            </thead>
            <tbody id="data-load-buku">
            </tbody>
          </table>
        </div>
      </div>
    </div>
  </div>
</div>
<div class="modal fade" id="modal-tambah_buku">
  <div class="modal-dialog modal-lg">
    <div class="modal-content">
      <div class="modal-header">
        <h4 class="modal-title">Tambah data buku</h4>
        <button class="close" data-dismiss="modal" type="button">&times;</button>
      </div>
      <div class="modal-body">
        <form id="form-tambah_buku">
          <div class="row">
            <div class="col-12">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Judul Buku</label>
                <input type="text" name="judul" class="form-control">
              </div>
            </div>
          </div>
          <div class="row">
            <div class="col-sm-5">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Pengarang</label>
                <input type="text" name="pengarang" class="form-control">
              </div>
            </div>
            <div class="col-sm-5">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Penerbit</label>
                <input type="text" name="penerbit" class="form-control">
              </div>
            </div>
            <div class="col-sm-2">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Tahun</label>
                <input type="number" name="tahun" class="form-control">
              </div>
            </div>
          </div>
          <div class="row">
            <div class="col-sm-6">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Jumlah Buku</label>
                <input type="number" name="jumlah_buku" class="form-control">
              </div>
            </div>
            <div class="col-sm-6">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Jumlah Eksemplar</label>
                <input type="number" name="jumlah_eksemplar" class="form-control">
              </div>
            </div>
          </div>
          <div class="row">
            <div class="col-sm-12">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Kategori</label>
                <input type="text" name="kategori" class="form-control">
              </div>
            </div>
          </div>
          <div class="row">
            <div class="col-sm-12">
              <div class="form-group">
                <input type="submit" name="submit" class="btn btn-block btn-primary" value="Tambah">
              </div>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>

<div class="modal fade" id="modal-edit_buku">
  <div class="modal-dialog modal-lg">
    <div class="modal-content">
      <div class="modal-header">
        <h4 class="modal-title">Edit Data</h4>
        <button type="button" class="close" data-dismiss='modal'>&times;</button>
      </div>
      <div class="modal-body">
        <form id="form-edit_buku">
          <input type="hidden" name="id">
          <div class="row">
            <div class="col-12">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Judul Buku</label>
                <input type="text" name="judul" class="form-control">
              </div>
            </div>
          </div>
          <div class="row">
            <div class="col-sm-5">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Pengarang</label>
                <input type="text" name="pengarang" class="form-control">
              </div>
            </div>
            <div class="col-sm-5">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Penerbit</label>
                <input type="text" name="penerbit" class="form-control">
              </div>
            </div>
            <div class="col-sm-2">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Tahun</label>
                <input type="number" name="tahun" class="form-control">
              </div>
            </div>
          </div>
          <div class="row">
            <div class="col-sm-6">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Jumlah Buku</label>
                <input type="number" name="jumlah_buku" class="form-control">
              </div>
            </div>
            <div class="col-sm-6">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Jumlah Eksemplar</label>
                <input type="number" name="jumlah_eksemplar" class="form-control">
              </div>
            </div>
          </div>
          <div class="row">
            <div class="col-sm-12">
              <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">Kategori</label>
                <input type="text" name="kategori" class="form-control">
              </div>
            </div>
          </div>
          <div class="row">
            <div class="col-sm-12">
              <div class="form-group">
                <input type="submit" name="submit" class="btn btn-block btn-primary" value="Edit">
              </div>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>

Penjelasan



  1. Tampilan UI secara umum terdiri dari filter data (berupa tombol dan input) dan  tabel
  2. Pada tabel di tag tbody, ditambahkan id #data-load-buku. Pada tbody inilah data dimuat oleh ajax
  3. Selain itu juga terdapat tombol Tambah Buku. Tombol berikut memiliki atribut bootstrap untuk membuka modal berisi tambah data.
Membuat Method untuk ajax

Sama dengan view, ajax juga mengakses method controller untuk mendapatkan data dari database. Singkatnya ajax dapat mengakses controller. Seperti yang kita tahu jika kita bisa mengakses controller, kita bisa mengakses segalanya termasuk model database.


  • Kita pisahkan method untuk menampilkan halaman dengan method untuk melayani ajax.
  • Karena untuk menampilkan data dari database lebih rumit dari yang lain (seperti ada filter, paginasi dll), maka kita pisahkan methodnya menjadi read_buku() untuk menampilkan sementara write_buku() untuk menambah, edit, dan hapus buku.
  • Secara keseluruhan, method tersebut seperti berikut (tambahkan kedalam controller Data.php)

public function read_buku($mode = 'single', $ui = FALSE, $pagination = FALSE)
{
 $this->load->model('BukuModel');

 // -----------------------------
 // Ambil semua data
 // -----------------------------
 if ($mode == 'show') {
  $this->db->start_cache();

  // Pagination
  $data['limit'] = $this->input->get('limit');
  if ($data['limit'] == '') {
   $data['limit'] = 0;
  }
  $data['page'] = $this->input->get('page');
  if ($data['page'] == '') {
   $data['page'] = 1;
  }
  $data['offset'] = ($data['page'] - 1) * $data['limit'];
  $this->db->stop_cache();

  // Pencarian Judul
  $cari = $this->input->get('cari');
  if ($cari != '') {
   $this->db->like('judul', $cari, 'BOTH');
  }

  // Pengurutan Data
  $order = $this->input->get('order');
  if ($order != '') {
   $this->db->order_by('id', $order);
  }

  // Pengambilan Data
  $data['data_buku'] = $this->BukuModel->show($data['limit'], $data['offset']);
  $this->db->flush_cache();

  // Route ke Pagination atau data
  if ($pagination != FALSE) {
   $data_buku_all = $this->BukuModel->show(0, 0);
   $pagination_data['limit'] = $data['limit'];
   $pagination_data['offset'] = $data['offset'];
   $pagination_data['page'] = $data['page'];
   $pagination_data['total_data'] = $data_buku_all['count'];
   $pagination_data['total_page'] = floor($pagination_data['total_data'] / $pagination_data['limit']);
   if (($pagination_data['total_data'] % $pagination_data['limit']) > 0) {
    $pagination_data['total_page']++; 
   }
   echo json_encode($pagination_data);
  }
  else {
   $this->load->view('data/buku/' .$ui, $data);
  }
 }

 // -------------------------------------
 // Ambil 1 Data
 // -------------------------------------
 else if ($mode == 'single') {
  $id = $this->input->get('id');
  $data = $this->BukuModel->single($id);
  echo json_encode($data);
 }
}

public function write_buku($mode)
{
 $this->load->model('BukuModel');
 if ($mode == 'insert') {
  if ($this->input->is_ajax_request()) {
   $data = array(
    'judul' => $this->input->post('judul'),
    'pengarang' => $this->input->post('pengarang'),
    'penerbit' => $this->input->post('penerbit'),
    'tahun' => $this->input->post('tahun'),
    'jumlah_buku' => $this->input->post('jumlah_buku'),
    'jumlah_eksemplar' => $this->input->post('jumlah_eksemplar'),
    'kategori' => $this->input->post('kategori')
   );
   $result = $this->BukuModel->insert($data);
   echo json_encode($result);
  }
 }
 else if ($mode == 'update') {
  if ($this->input->is_ajax_request()) {
   $id = $this->input->post('id');
   $data = array(
    'judul' => $this->input->post('judul'),
    'pengarang' => $this->input->post('pengarang'),
    'penerbit' => $this->input->post('penerbit'),
    'tahun' => $this->input->post('tahun'),
    'jumlah_buku' => $this->input->post('jumlah_buku'),
    'jumlah_eksemplar' => $this->input->post('jumlah_eksemplar'),
    'kategori' => $this->input->post('kategori')
   );
   $result = $this->BukuModel->update($data, $id);
   echo json_encode($result);
  }
 }
 else if ($mode == 'delete') {
  if ($this->input->is_ajax_request()) {
   $id = $this->input->post('id');
   $result = $this->BukuModel->delete($id);
   echo json_encode($result);
  }
 }
}

Penjelasan


  1. Pada method read_buku() terbagi 3 parameter, 
    1. pertama parameter mode yang berisi show atau single.
      show
       berfungsi untuk menampilkan data banyak,
      didalamnya kita bisa tambahkan filter seperti pencarian (db->like), order (db->order) dll.
    2. Parameter ui.
      Pada bagian show, saya tambahkan parameter ui untuk mendefinisikan view mana yang akan digunakan.
    3. Parameter pagination.
      jika parameter ini di isi, maka akan menampilkan data paginasi, seperti maksimum halaman, baris / halaman dll. 
  2. Jika Ajax mengakses ciajax/read_buku/show/ajax-list-1, maka akan muncul data buku pada view ajax-list-1.php
  3. Berbeda pada method write_buku(), didalamnya mempunyai parameter mode yang berisi insert, update atau delete

  • Langkah selanjutnya, kita buat view untuk ajax. pada folder application/views/data/buku buat file ajax-list-table.php. Copy kode berikut:

<?php 
 if ($data_buku['count'] > 0) {
  $no = 0 + $offset;
  foreach ($data_buku['object'] as $buku) {
   $no++;
?>
<tr>
 <td><?=$no?></td>
 <td><?=$buku->judul?></td>
 <td><?=$buku->pengarang?></td>
 <td><?=$buku->penerbit?></td>
 <td><?=$buku->tahun?></td>
 <td><?=$buku->jumlah_buku?></td>
 <td><?=$buku->jumlah_eksemplar?></td>
 <td><?=$buku->kategori?></td>
 <td>
  <a href="#" class="edit-data text-primary" data-id="<?=$buku->id?>">
   <i class="material-icons">edit</i>
  </a>
  <a href="#" class="hapus-data text-danger" data-id="<?=$buku->id?>">
   <i class="material-icons">delete</i>
  </a>
 </td>
</tr>
<?php
  }
 }
?>

Penjelasan


  1. Ingat saat membuat halaman view tadi?, kita sudah menyiapkan tabel dan mengosongkan isi dari <tbody>. File inilah yang akan ditempatkan didalam <tbody>
  2. File tersebut berisi baris tabel (<tr>)
  3. View ini dipanggil dari method read_buku() yang pada method tersebut kita sudah dapatkan data dari database dan ditampilkan di view ini menggunakan foreach.
  4. Yang paling inti adalah pada bagian link edit dan delete. Masing-masing memiliki atribut data-id yang berisi id setiap baris data. Id inilah yang nantinya diolah lewat script jQuery untuk mengedit dan menghapus data.
    Selain itu juga memiliki class edit-data dan hapus-data agar dapat dipanggil oleh jQuery nanti



  • Method + View untuk melayani ajax selesai, anda bisa akses ke (localhost/ciajax/data/read_buku/show/ajax-list-table?limit=50&page=1) . Maka akan muncul tampilan seperti berikut. Itu berarti, data berhasil didapatkan berupa kumpulan <tr> siap diakses oleh ajax



Membuat Script jQuery untuk setiap elemen

Disinilah inti dari tutorial ini. Semua elemen seperti tombol, inputan, load data buku di lakukan oleh Javascript. Pada bagian ini, langkah langkah dibawah saya buat terpisah agar anda dapat memahami dengan mudah
  • Masih berada di view anda, kode jQuery ini terletak pada bagian bawah setelah load template js_script.php


        ... kode ui sebelumnya
    </div>
</div>

<?php $this->view('template/js_script.php') ?>
<script type="text/javascript">

//  Kode Javascript jQuery disini

</script>
<?php $this->view('template/footer.php')?>


  •  Tambahkan kode dibawah ini, kedalam bagian kode jquery

// -------------------------------------
// Pemanggilan Ajax
// -------------------------------------
var read_buku = {
 limit: 50,
 page: 1
}
function refresh_buku() {
 $.ajax({
  url: '<?=site_url('data/read_buku/show/ajax-list-table/pagination')?>',
  type: 'GET',
  dataType: 'json',
  data: read_buku,
 })
 .done(function(data) {
  if (read_buku.page == 1) {
   $("#filter-previous_page").addClass('disabled');
  }
  else {
   $("#filter-previous_page").removeClass('disabled');
  }
  if (read_buku.page == data.total_page) {
   $("#filter-next_page").addClass('disabled');
  }
  else {
   $("#filter-next_page").removeClass('disabled');
  }
  $("#filter-page").attr('max', data.total_page);
  $("#filter-page").attr('title', 'Halaman Maksimum: ' + data.total_page);
  $("#filter-page").attr('data-original-title', 'Halaman Maksimum: ' + data.total_page);
  $.ajax({
   url: '<?=site_url('data/read_buku/show/ajax-list-table')?>',
   type: 'GET',
   dataType: 'html',
   data: read_buku,
  })
  .done(function(data) {
   $("#data-load-buku").fadeOut(100, function() {
    $.getScript('<?=site_url('assets/custom/js/default.js')?>');
    $("#data-load-buku").html(data).fadeIn(100);
    event_buku();
   });
  });
 });
}
refresh_buku();

// -------------------------------------
// Event setelah data buku dimuat
// -------------------------------------
function event_buku() {

 // ----------------------------------------
 // Event klik edit buku
 // ----------------------------------------
 ctx_modal_edit_buku = $("#modal-edit_buku");
 $(".edit-data").click(function(e) {
  id = $(this).data('id');
  $.ajax({
   url: '<?=site_url('data/read_buku/single')?>',
   type: 'GET',
   dataType: 'json',
   data: {id: id},
  })
  .done(function(data) {
   $("#form-edit_buku input[name='id']").val(data.object.id);
   $("#form-edit_buku input[name='judul']").val(data.object.judul);
   $("#form-edit_buku input[name='pengarang']").val(data.object.pengarang);
   $("#form-edit_buku input[name='penerbit']").val(data.object.penerbit);
   $("#form-edit_buku input[name='tahun']").val(data.object.tahun);
   $("#form-edit_buku input[name='jumlah_buku']").val(data.object.jumlah_buku);
   $("#form-edit_buku input[name='jumlah_eksemplar']").val(data.object.jumlah_eksemplar);
   $("#form-edit_buku input[name='kategori']").val(data.object.kategori);
   ctx_modal_edit_buku.modal('show').on('shown.bs.modal', function(e) {
    $("#form-edit_buku input[name='judul']").focus();
   });
  });
 });

 // ----------------------------------------
 // Hapus Data Buku
 // ----------------------------------------
 $(".hapus-data").click(function(e) {
  e.preventDefault();
  id = $(this).data('id');
  if (confirm("Anda yakin?")) {
   $.ajax({
    url: '<?=site_url('data/write_buku/delete')?>',
    type: 'POST',
    dataType: 'json',
    data: {id: id},
   })
   .done(function(data) {
    if (data) {
     refresh_buku();
     buat_notifikasi({
      icon: 'done_outline',
      message: "Data berhasil dihapus",
      type: 'success'
     });
    }
   });
  }
 });

}

// -------------------------------------
// Event Filter / Penyaringan Data
// -------------------------------------
var ctx_limit = $("#filter-limit"); 
var ctx_page = $("#filter-page"); 
var ctx_next_page = $("#filter-next_page"); 
var ctx_previous_page = $("#filter-previous_page"); 
var ctx_cari = $("#filter-cari");

ctx_limit.on('input', function(e) {
 value = $(this).val();
 if (value > 0) {
  read_buku.limit = value;
 }
 else {
  $(this).val(50);
 }
 $("#filter-page").val(1);
 read_buku.page = 1;
 refresh_buku();
});
ctx_page.on('input', function(e) {
 value = $(this).val();
 if (value > 0) {
  read_buku.page = value;
 }
 else {
  $(this).val(1);
 }
 refresh_buku();
});
ctx_next_page.click(function(e) {
 disabled = $(this).hasClass('disabled');
 if (!disabled) {
  read_buku.page++;
  ctx_page.val(read_buku.page);
  refresh_buku(); 
 }
});
ctx_previous_page.click(function(e) {
 disabled = $(this).hasClass('disabled');
 if (!disabled) {
  read_buku.page--;
  ctx_page.val(read_buku.page);
  refresh_buku(); 
 }
});
ctx_cari.on('input', function(e) {
 value = $(this).val();
 if (value != '') {
  read_buku.cari = value;
 }
 else {
  delete read_buku.cari;
 }
 refresh_buku();
});


// -------------------------------------
// Tambah Data Buku
// -------------------------------------
$("#form-tambah_buku").submit(function(e) {
 e.preventDefault();
 ctx_modal = $("#modal-tambah_buku");
 form = $(this);
 $.ajax({
  url: '<?=site_url('data/write_buku/insert')?>',
  type: 'POST',
  dataType: 'json',
  data: form.serialize(),
 })
 .done(function(data) {
  if (data) {
   form[0].reset();
   ctx_modal.modal('hide');
   buat_notifikasi({
    icon: 'done_outline',
    message: "Data berhasil ditambahkan",
    type: 'success'
   });
   refresh_buku();
  }
  else {
   alert('Tidak dapat terhubung dengan database');
  }
 });
});

// -------------------------------------
// Edit buku
// -------------------------------------
$("#form-edit_buku").submit(function(e) {
 e.preventDefault();
 form = $(this);
 $.ajax({
  url: '<?=site_url('data/write_buku/update')?>',
  type: 'POST',
  dataType: 'json',
  data: form.serialize(),
 })
 .done(function(data) {
  if (data) {
   form[0].reset();
   ctx_modal_edit_buku.modal('hide');
   buat_notifikasi({
    icon: 'done_outline',
    message: 'Data berhasil di edit',
    type: 'success'
   });
   refresh_buku();
  }
 });
});

Untuk penjelasan, pada script ini sudah tertulis didalam kode dalam bentuk comment. Jika comment  tersebut belum dimengerti, anda bisa tulis pertanyaan di kolom komentar

Semua siap, waktunya testing


  • Buka browser, ketikkan url localhost/ciajax/data/barang. Coba tambahkan, edit ataupun hapus data.


Kesimpulan

Pada dasarnya, alur data hampir sama dengan CRUD database biasa. 

Pada operasi read (menampilkan data)
Perbedaannya terdapat pada cara mendapatkan data. Jika pada CRUD database biasa, data ditampilkan bersamaan dengan tampilan utama. Data dari DB dilempar bersamaan dengan $this->load->view()

Namun jika CRUD Ajax, Tampilan utama dimuat terlebih dahulu dan saat tampilan sudah siap, kode jQuery Ajax diam diam mengakses method controller untuk mengambil data.

Pada operasi insert, update, delete (Tambah, Edit, Hapus)
Perbedaannya terdapat pada cara suatu form mengirimkan data. Pada CRUD biasa, form mengirimkan data dengan mengakses URL dalam method transfer POST, singkatnya form harus berpindah halaman untuk mengirimkan data, dan mendapat response berupa redirect ke list data lagi.

Sedangkan CRUD Ajax, saat form disubmit, kode Ajax menangkap data dan mencegah pergantian halaman. Selanjutnya, sama dengan CRUD biasa data tersebut diterima oleh method controller untuk diteruskan ke model.

Source Code (disertai file sql didalamnya)
ciajax, ~4 MB


Semoga bermanfaat untuk anda. Jika ada pertanyaan, silahkan isi pada kolom komentar. Saya mengusahakan untuk cepat membalas.

Belajar CodeIgniter Level Pemula dengan Mudah dan Lengkap (Artikel Bertahap)

3:12 AM Add Comment

Halo para pembaca Wildanie, sudah lama sekali (1 tahun) hehe tidak pernah berbagi ilmu seperti dulu. Namun pada saat itu saya banyak sekali Pengetahuan baru dan sangat tidak sabar untuk saya bagikan di blog ini untuk pembaca yang terhormat.


Di postingan kali ini kita akan membahas dan belajar tentang CodeIgniter. CodeIgniter sendiri adalah framework PHP yang sering sekali digunakan sampai sekarang. CodeIgniter menyediakan banyak bantuan berupa helper, library atau lainnya untuk mempercepat pekerjaan para programmer. Selain itu Framework ini juga dapat menata file pekerjaan anda, agar teroganisir. Hal ini, membuat CodeIgniter cocok digunakan untuk project berskala besar.

Saya sarankan anda membaca artikel ini secara lengkap dari atas sampai bawah, karena saya membuat tutorial ini sambil mempraktekannya, mohon maaf jika kalimatnya sangat panjang dan mendetail. Di setiap langkah, saya ungkapkan apa yang ada didalam pikiran, apa yang harus diketahui oleh seorang pemula pada umumnya.


Bagian Tutorial:


Mengapa menggunakan CodeIgniter

  • Saat kita membuat Web dengan menggunakan bahasa pemrograman PHP secara Native/Murni kita sering menjumpai banyak pola perulangan. Serasa kita mengetikkan code yang sama berulang kali. dengan CodeIgniter anda dapat mengorganisir file dan alur logika yang anda buat dengan mudah, karena CodeIgniter sendiri menggunakan konsep Model View Controller (MVC). 
  • Banyak Helper yang dapat digunakan
    Contohnya saat kita hendak membuat upload file, kita tinggal panggil fungsi / objeknya.
  • Pengambilan data dari database yang lebih mudah
    di CodeIgniter juga sudah disediakan Query Builder. Misal kita hendak mengambil data tabel siswa dari database. kita cukup buat saja query buildernya di model. kemudian saat hendak melakukan INSERT INTO, di CodeIgniter cukup masukkan Array pada parameter fungsi saja.
  • Penerimaan GET/POST lebih mudah dan aman
  • Terorganisir, sehingga cocok untuk pengembangan aplikasi berskala besar.
  • dan masih banyak lagi

Mempersiapkan Project CodeIgniter
    • Menyiapkan Lembar Kerja
      • Langkah awal, siapkan Text Editor favorit anda. Pada artikel ini, saya menggunakan Sublime Text 3. Jika anda belum menentukan text editor yang cocok, saya sarankan untuk menggunakan software ini.
      • Download CodeIgniter terbaru, anda bisa klik link download dibawah
    CodeIgniter, ~ 2,6 Mb

      • CodeIgniter membutuhkan server seperti XAMPP/WAMP, pastikan anda sudah menginstallnya.
      • Buat Folder Project anda (pada artikel kali ini: "belajar_ci"), letakkan didalam folder php di server anda (htdocs untuk XAMPP atau www untuk WAMP) .
      • Extract isi dari CodeIgniter yang didownload tadi. 
      • Hidupkan Server lalu coba akses project lewat browser, maka muncul tampilan seperti dibawah.


    • Menghilangkan index.php pada URL
    Pada kondisi default CodeIgniter, URL yang dimasukkan harus ada index.php, misalnya: localhost/belajarCI/index.php/welcome. Kita harus mengetikkan index.php pada kolom url untuk memanggil controller Welcome. Pada umumnya, URL suatu website berformat seperti ini: localhost/belajar_ci/welcome.
    Sebenarnya masalah ini termasuk minor / hal kecil, namun bagi sebagian besar programmer, hal ini mengganggu saat kita mengakses halaman tertentu saat deploy, lagi pula cukup mudah untuk mengatasi hal ini.


      • Buat File .htaccess didalam folder project, jadi untuk saya file ini berlokasi di belajarci/.htaccess
      • didalam file .htaccess tersebut, copy-paste kode berikut ini
    RewriteCond $1 !^(index\.php|resources|robots\.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]


      • Buka config.php pada folder belajar_ci/application/config/. 
        • Rubah isi dari elemen base_url ke alamat project anda. untuk saya berarti "http://localhost/belajarci"
        • kosongkan elemen index_page
        • dan pastikan elemen uri_protocol berisi "REQUEST_URI"
      • akses melalui browser anda tanpa menuliskan index.php. untuk saya localhost/belajar_ci/welcome


    Belajar membuat halaman web

    • Membuat controller
    Konsep Dasar

    Controller pada CodeIgniter berfungsi sebagai Router, artinya:
    1. jika kita mengakses "localhost/belajar_ci/data/buku", maka yang dieksekusi adalah fungsi buku() didalam controller Data.php. namun 
    2. jika mengakses "localhost/belajar_ci/data" saja, maka yang dieksekusi adalah fungsi index() pada controller Welcome.php
    3. Secara singkat formatnya seperti dibawah
      "localhost/belajar_ci/nama_controller/fungsi". fungsi ini disebut juga dengan method. jika method tidak diisikan pada url, maka yang dieksekusi adalah method/fungsi index().


      • untuk membuat controller, masuk ke folder belajar_ci/application/controllers. buat file baru beri nama sesuai nama controllernya dengan huruf kapital. 
      • Untuk sekarang, buat file Data.php. kemudian buka menggunakan text editor, tuliskan kode php seperti dibawah.

    <?php
    class Data extends CI_Controller {
     public function buku()
     {
      echo "<h1>Ini Data Buku</h1>";
     }
    }
    ?>

    Penjelasan

    1. Controller harus berupa class yang extends ke CI_Controller
    2. Pada kode diatas, terdapat method buku() dengan kode PHP untuk menampilkan teks didalamnya.
      Jika anda belum familiar dengan kode PHP,



      • Kemudian, coba akses url "localhost/belajar_ci/data/buku". lihat apa yang terjadi

      • Maka muncul tampilan seperti diatas. 
      • Ok, kita masuk ke penjelasan.
        • Saat kita mengakses belajar_ci/data/buku berarti sama dengan menjalankan method buku() di controller Data
        • Dalam kode diatas, method tersebut berisi statement menampilkan heading 1 yang berisi "Ini Data Buku".

    • Membuat View
    Konsep Dasar

    View pada dasarnya adalah file yang berisi html bertujuan untuk menampilkan tampilan kepada pengguna. kita tidak mungkin menuliskan html / css pada controller yang sejatinya adalah file khusus PHP (method dan logika).

      • Untuk membuat View, masuk ke folder belajar_ci/application/views/ , anda dapat membuat file dan folder disini. 
      • Saya sarankan untuk membuat folder di setiap konteks halaman agar filenya terorganisir secara rapi. contohnya: saat anda mau membuat file view data buku, ada baiknya anda letakkan file view buku tadi didalam folder "Data" karena ada kemungkinan untuk membuat file lain yang konteksnya sama, misalnya: file view data siswa, data pegawai yang juga termasuk Data

      • Ok. kita kerjakan view buku (buku.php). Mari buat tampilan sederhana, anda bisa copy-paste kode berikut

    <!DOCTYPE html>
    <html>
    <head>
     <title>Perpustakaan - Data Buku</title>
    </head>
    <body>
     <h1>Perpustakaan</h1>
     <hr>
     <h4>Data Buku</h4>
    </body>
    </html>


      • kemudian panggil file view buku.php ini di controller Data tadi (belajar_ci/application/controllers/data.php). kodenya tampak seperti dibawah (penjelasan dibawahnya)
    <?php 
    class Data extends CI_Controller {
     public function buku()
     {
      $this->load->view('data/buku');
     }
    }
    ?>

    Penjelasan

    1. Memanggil view, menggunakan $this->load->view('alamat_view')
    2. Alamat view, berawal dari folder data dan tanpa menuliskan ekstensi ".php".
      Misal: jika view ada di view/data/barang.php, anda cukup menuliskan 'data/barang'

      • Lihat hasilnya melalui browser dengan url localhost/belajar_ci/data/buku. 


    Melempar data dari controller ke view

    Uniknya jika bekerja dengan konsep MVC, kita bisa pisahkan script khusus PHP dengan UI / HTML, di framework ini kode PHP diletakkan di controller, sementara view menangani tampilan. Alurnya View mendapatkan data dari controller melalui load view tadi. Data tersebut dapat berupa teks, array atau yang lainnya

    Skenario

    Kita akan membuat data buku berupa array yang ditulis di controller, kemudian ditampilkan di view

    • Buka controller (Data.php). buat data array seperti dibawah (penjelasan ada dibawahnya)

    <?php 
    class Data extends CI_Controller {
     public function buku()
     {
      $data['data_buku'] = array(
       'Memasak untuk pemula', 
       'Dasar-dasar HTML', 
       'Cara merakit komputer', 
       'Framework Laravel untuk pemula'
      );
      $this->load->view('data/buku', $data);
     }
    }
    ?>

    Penjelasan

    1. Untuk melempar data, data tersebut harus berada didalam array. Pada kode diatas, data berada pada array $data dengan nama indeks data_buku. 
    2. kemudian indeks tersebut di isi dengan array berisi kumpulan judul buku.
    3. untuk mengirimkan ke view, array yang berisi data tersebut ($data) ditambahkan di parameter kedua pada fungsi view()

      • Kemudian, di file view (Buku.php). kita bisa terima dan tampilkan data tersebut, kodenya tampak seperti dibawah

      <!DOCTYPE html>
      <html>
      <head>
       <title>Perpustakaan - Data Buku</title>
      </head>
      <body>
       <h1>Perpustakaan</h1>
       <hr>
       <h4>Data Buku</h4>
       <ol>
        <?php 
         foreach ($data_buku as $buku) {
        ?>
        <li><?=$buku?></li>
        <?php
         }
        ?>
       </ol>
      </body>
      </html>

      1. untuk mengambil data, anda cukup menuliskan nama indeks tadi sebagai variabel. contoh jika tadi kita menuliskan $data['data_buku'] , maka di view cukup menuliskan $data_buku.
      2. karena data berupa array yang berisi lebih dari 1 data. untuk menampilkannya harus menggunakan perulangan foreach()

        • Kemudian silahkan lihat di browser, hasilnya data dari controller sudah muncul di view

        Membuat Link ke halaman lain

        Pada native coding, sangat mudah untuk membuat link ke halaman lain, tinggal buat tag <a> kemudian tulis atribut href ke alamat file yang dituju. Berbeda dengan CodeIgniter, pada CodeIgniter kita tidak bisa memanggil file php secara langsung. Untuk itu CodeIgniter sudah menyediakan helper "url". Kemudian kita hanya memanggil fungsi site_url(), fungsi ini bawaan dari helper url CodeIgniter.

        Skenario

        Kita akan menambahkan navigasi pada tampilan yang telah dibuat.

        • Tambahkan helper url pada CodeIgniter, caranya buka file belajar_ci/application/config/autoload.php

        • pada view anda (buku.php) anda bisa buat navigasi,  seperti dibawah

        <!DOCTYPE html>
        <html>
        <head>
         <title>Perpustakaan - Data Buku</title>
        </head>
        <body>
         <h1>Perpustakaan</h1>
         <ul>
          <li><a href="<?=site_url('data/buku')?>">Data Buku</a></li>
          <li><a href="<?=site_url('data/pegawai')?>">Data Pegawai</a></li>
          <li><a href="<?=site_url('data/siswa')?>">Data Siswa</a></li>
         </ul>
         <hr>
         <h4>Data Buku</h4>
         <ol>
          <?php 
           foreach ($data_buku as $buku) {
          ?>
          <li><?=$buku?></li>
          <?php
           }
          ?>
         </ol>
        </body>
        </html>

          • pada kode diatas, kode navigasi berada dibawah h1 perpustakaan. pada href kita menggunakan fungsi php site_url(alamat).
        • Akses menggunakan browser lagi untuk melihat hasilnya. 
         

        Jika anda mengklik data pegawai atau pun data siswa, akan muncul error 404 karena kita belum membuat methodnya. anda bisa membuat halaman untuk pegawai dan siswa dengan cara yang sama seperti diatas sebagai evaluasi dari tutorial diatas.

        Saya harap anda dapat memahami tutorial diatas. Jika anda berhasil, berarti anda sudah mengetahui dasar pokok pemrograman web menggunakan CodeIgniter.