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

Menampilkan data (CRUD) tabel dari database menggunakan CodeIgniter

4:17 AM Add Comment
Sebagian besar aplikasi, pasti mempunyai data yang di manajemen / diolah. data tersebut disimpan dalam suatu tempat yang dinamakan dengan Database. Database tersebut dioperasikan oleh software yang disebut dengan DBMS. Salah satu DBMS yang paling populer adalah MySQL.

Diartikel kali ini, kita akan membuat aplikasi web sederhana yang bisa menampilkan data dari database sebagai informasi. Selain itu aplikasi tersebut bisa mengolah (membuat, mengedit dan menghapus) data yang ada didalamnya. Aplikasi web ini akan kita buat dengan Framework CodeIgniter. Jika anda belum familiar dengan CodeIgniter, anda bisa baca artikel berikut.


Ok. Sebelum menyimak tutorial dibawah, saya sarankan anda tidak hanya melakukan Copy-Paste kode sintaks, di artikel ini saya sertakan penjelasan yang saya buat se-jelas mungkin. Akan lebih baik jika kita tidak hanya bisa namun dapat mengerti teori / konsep nya


Menyiapkan Project CodeIgniter

  • Siapkan folder project anda (pada artikel ini kita beri nama: perpustakaandb). berarti alamat saya adalah: http://localhost/perpustakaandb
  • Kemudian Test dengan mengakses alamatnya.

  • Untuk project ini, kita akan membutuhkan beberapa library dan helper: Library Database untu koneksi Database dan Helper URL untuk navigasi dan link. buka file application/config/autoload.php, lihat gambar dibawah:


Menyiapkan Database, tabel dan record

Konsep Dasar
Langkah awal adalah menyiapkan database yang akan digunakan. Tak hanya itu, kita juga harus menyiapkan tabel beserta isinya. 

Langkah-langkah
  • Buka GUI PhpMyAdmin jika anda menggunakan XAMPP / WAMP. caranya buka browser ketikkan localhost/phpmyadmin
  • Kemudian buat database dengan nama perpustakaan_belajar, didalamnya buat tabel buku dengan kolom dan tipe data seperti dibawah.
    pada kolom penerbit_id dan pengarang_id sengaja saya buat int atau angka karena penerbit / pengarang akan kita buatkan tabel khusus yang nantinya dihubungkan satu sama lain di artikel berikutnya

  • setelah tabel dibuat, tambahkan data / record dengan klik tabel buku, lalu klik tambahkan
  • Isi semua kolomnya kecuali ID karena kita setting Auto Increment tadi, untuk penerbit_id dan pengarang_id pada artikel ini anda tuliskan sembarang angka karena kita set tipe data ke int
  • setelah semua di isi klik tombol kirim yang ada dibawah sendiri. Data akan dimasukkan, anda bisa klik jelajahi / browse untuk melihat isi dari tabel


Menghubungkan dan mengintegrasikan database

Konsep Dasar

Untuk menghubungkan database, CodeIgniter menyediakan file konfigurasi untuk database. File tersebut berada pada application/config/database.php. Setelah itu database sudah terkoneksi, tinggal mengolah bagaimana cara menerima data dalam bentuk tertentu. Pengolahan ini terjadi di model, dan perintah sintaks nya menggunakan fitur query builder bawaan CodeIgniter.

pengolahan tersebut berupa query database CRUD, yang kemudian data tersebut dikonversi secara otomatis menjadi array object PHP berkat query builder. Array tersebut dikirim kontroller dan ditampilkan pada view.
  • Mengkonfigurasi database codeigniter
    • Pertama, masuk ke folder application/config. cari dan buka file database.php menggunakan text editor anda
    • Rubah isi dari ke empat indeks konfigurasi berikut
      • hostname : lokasi komputer database anda (pada artikel ini: localhost)
      • username : username untuk akses database (phpmyadmin), defaultnya adalah: root
      • password : password akses database, default bawaannya adalah tidak ada / ""
      • database : nama database, di artikel ini adalah perpustakaan_belajar

  • Membuat Model
    Model adalah kumpulan fungsi pembantu dalam mengoperasikan database, di model inilah kita menuliskan query MySQL. Singkatnya, model menjembatani antara Database dan sistem CodeIgniter sebelum masuk ke controller
    • Pertama, untuk membuat model, masuk ke folder application/models, di folder ini anda membuat file model. 
    • Pada artikel kali ini, kita buat file BukuModel.php, kemudian isi dengan kode dibawah (penjelasan dibawah)

<?php 
class BukuModel extends CI_Model {
  public $table = 'buku';

  public function show()
  {
    $data = $this->db->get($this->table)->result();
    return $data;
  }

  public function single($id)
  {
    $data = $this->db->get_where($this->table, array('id' => $id))->row();
    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));
  }
}
?>

    • Penjelasan
      • File model berupa class yang extends ke CI_Model (wajib, bawaan CI)
      • Karena kita akan membuat CRUD (lihat, tambah, edit dan hapus) data, maka didalamnya kita buat 4 method
      • Untuk menampilkan data (select), menggunakan $this->db->get('nama_tabel'). dan jika ingin mengkonversi data kedalam array object,  tambahkan result(). 
        lalu data tersebut dikembalikan oleh fungsi sebagai keluaran dengan return.
      • Insert menggunakan $this->db->insert('nama_tabel', $array_data). array data tersebut kita dapat dari parameter, dimana parameter tersebut di isi oleh controller
      • Update sama dengan insert, hanya ditambahkan kondisi WHERE, dimana pada CI tertulis sebagai array('kolom', isi). data yang dibutuhkan juga didapat dari parameter fungsi
      • Delete cukup menggunakan $this->db->delete('nama_tabel', array('id'=> $id_yangdihapus)
    • Kebutuhan database telah selesai.

Konsep CRUD pada CodeIgniter

Seperti yang anda tahu, CodeIgniter bekerja dengan menjalankan method melalui url, bukan memanggil file secara langsung. Sementara itu CUD (Create, Update, Delete) mempunyai beberapa aktifitas seperti berikut: 
  1. Menampilkan form untuk inputan data
    Berupa View, Jadi kita membutuhkan metode untuk menjalankan view sehingga kita mempunyai URL seperti berikut. perpustakaandb/data/tambah_buku
  2. Setelah inputan, user mengklik submit. Pada PHP proses pengiriman data inputan menggunakan request berupa POST / GET. Kemudian data tersebut diolah oleh Script PHP Action, yang diisikan pada atribut tag form. Berarti kita perlu method lagi untuk Action nya, itu artinya ada URL lagi: perpustakaandb/data/tambah_buku_submit

Dengan menggunakan cara diatas, kita perlu banyak sekali method. Untuk Create saja membutuhkan 2 method, dan jika CUD membutuhkan 6 method. Semakin banyak method, semakin banyak juga URL yang berarti cara ini membuat project sangat tidak terorganisir.

Saya mempunyai sebuah trik untuk mengatasi hal ini. Yaitu, semua aktifitas CRUD dilakukan di satu method saja yang membuat suatu pekerjaan menjadi efisien. Contohnya, jika kita sudah membuat manajemen data buku dan ingin membuat manajemen data lain misal pegawai, cukup Copy-paste saja method dan merubah beberapa elemen dan menambah view.

Ok. Mari kita desain struktur method terlebih dahulu, artinya kita mendesain struktur URL agar lebih terstruktur. Pada CodeIgniter, format URL adalah:
perpustakaandb/controller/method/parameter_1/parameter_2/parameterseterusnya.
maka konsep format terbaik adalah:
perpustakaandb/data/buku/operasi/id/submit.
  • Parameter Operasi: Mendefinisikan operasi yang digunakan, contoh: tambah, edit, atau hapus
  • Parameter Id : Mendefinisikan ID data (hanya untuk edit), karena jika mengedit harus ada data yang akan di edit bukan?
  • Parameter Submit : Memberitahu, bahwa kita akan mengeksekusi action untuk submit form

Membuat CRUD (Create/Insert)

Konsep Dasar

Pertama, kita tampilkan datanya (Read / Select). Cukup mudah, hanya tinggal panggil method show() dari model dan tempatkan pada variabel untuk menampung data, kemudian dilempar ke view

Berbeda dengan tambah, edit dan hapus data (CUD), pada CUD kita melakukan Write ke database sehingga alur data berawal dari inputan kita (View).
Contoh alur data untuk tambah data sebagai berikut:
  1. data berawal dari View berupa inputan form oleh user
  2. kemudian form melakukan submit sehingga menjalankan method controller dengan membawa data berupa POST. 
  3. Lalu, controller memanggil method model membawa data dengan parameternya
  4. Terakhir, Model melakukan query insert oleh method insert().

Alur tersebut cukup sederhana, mari kita praktekkan.

Langkah-langkah: 

  • Buat controller Data.php, gunakan kode berikut (disertai penjelasan).

<?php
class Data extends CI_Controller {
  public function buku($operasi = 'daftar',$id = FALSE, $submit = FALSE)
  {
    $this->load->model('BukuModel');    
    if ($operasi == 'daftar') {
      $data['data_buku'] = $this->BukuModel->show();
      $this->load->view('data/buku/list', $data);
    }
    else if ($operasi == 'tambah') {
      if ($submit == FALSE) {
        $this->load->view('data/buku/tambah');
      }
      else {
        $data_insert = array(
          'judul' => $this->input->post('judul'),
          'penerbit_id' => $this->input->post('penerbit_id'),
          'pengarang_id' => $this->input->post('pengarang_id'),
          'tahun' => $this->input->post('tahun'),
          'jumlah' => $this->input->post('jumlah')
        );
        $this->BukuModel->insert($data_insert);
        redirect(site_url('data/buku'),'refresh');
      }
    }
    else if ($operasi == 'edit') {
      if ($id != FALSE) {
        if ($submit == FALSE) {
          $data['buku'] = $this->BukuModel->single($id);
          $this->load->view('data/buku/edit', $data);
        }
        else {
          $data_update = array(
            'judul' => $this->input->post('judul'),
            'penerbit_id' => $this->input->post('penerbit_id'),
            'pengarang_id' => $this->input->post('pengarang_id'),
            'tahun' => $this->input->post('tahun'),
            'jumlah' => $this->input->post('jumlah')
          );
          $this->BukuModel->update($data_update, $id);
          redirect(site_url('data/buku'),'refresh');
        }
      }
      else {
        echo "Tidak ada data yang diedit";
      }
    }
    else if ($operasi == 'hapus') {
      $this->BukuModel->delete($id);
      redirect(site_url('data/buku'),'refresh');
    }
  }
}
?>

Penjelasan
    1. Method buku memiliki 3 parameter seperti yang dijelaskan diatas
    2. Parameter tersebut berfungsi sebagai penentu, kode mana yang dieksekusi berdasarkan aktivitas CRUD (menampilkan form, action submit dll.).
    3. Pada bagian kode yang menangani action, data diterima dari view lewat POST dan dikirimkan ke model ($this->BukuModel->insert($data)) dengan menggunakan variabel array
    4. setelah melakukan operasi, dilakukan redirect untuk berpindah halaman secara otomatis
    5. pada kode untuk menampilkan view, kode diatas memanggil 3 view (daftar, tambah dan edit). Untuk hapus tidak diperlukan view karena langsung dijalankan di controller lalu redirect ke halaman list
  • Membuat View
    • pada folder application/view/data/buku yang telah dibuat tadi tambahkan file view. buat file view list.php, kode seperti berikut:
<!DOCTYPE html>
<html>
<head>
  <title>Perpus - Data Buku</title>
</head>
<body>
  <h1>Sistem Perpustakaan</h1>
  <hr>
  <h3>Data Buku <small><a href="<?=site_url('data/buku/tambah')?>">[Tambah data]</a></small></h3>
  <table border="1">
    <thead>
      <tr>
        <th>No</th>
        <th>Judul</th>
        <th>Penerbit</th>
        <th>Pengarang</th>
        <th>Tahun</th>
        <th>Jumlah</th>
        <th>Aksi</th>
      </tr>
      <?php 
      $no = 0;
      foreach ($data_buku as $buku) {
        $no++;
        ?>
        <tr>
          <td><?=$no?></td>
          <td><?=$buku->judul?></td>
          <td><?=$buku->penerbit_id?></td>
          <td><?=$buku->pengarang_id?></td>
          <td><?=$buku->tahun?></td>
          <td><?=$buku->jumlah?></td>
          <td>
            <a href="<?=site_url('data/buku/edit/' .$buku->id)?>">Edit</a> | 
            <a href="<?=site_url('data/buku/hapus/' .$buku->id)?>">Hapus</a>
          </td>
        </tr>
        <?php
      }
      ?>
    </thead>
  </table>
</body>
</html>

Penjelasan
  1. Isi view tambah.php adalah html sederhana, seperti <h1> untuk judul, <a> untuk link, dan tabel
  2. Pada baris tabel <tr>, terdapat perulangan yang berfungsi untuk menampilkan data buku lemparan dari controller.
    • Pada folder yang sama buat file tambah.php dengan kode berikut
<!DOCTYPE html>
<html>
<head>
 <title>Perpustakaan - Tambah buku</title>
</head>
<body>
 <h1>Perpustakaan</h1>
 <hr>
 <h3>Tambah Data Buku</h3>
 <form action="<?=site_url('data/buku/tambah/x/submit')?>" method="POST">
  <label>Judul : </label>
  <input type="text" name="judul" placeholder="Judul Buku" required><br/>
  <label>Penerbit : </label>
  <input type="number" name="penerbit_id" placeholder="Nama Penerbit" value="0"><br/>
  <label>Pengarang : </label>
  <input type="number" name="pengarang_id" placeholder="Nama Pengarang" value="0"><br/>
  <label>Tahun : </label>
  <input type="number" name="tahun" placeholder="Tahun Pembuatan" required><br/>
  <label>Jumlah : </label>
  <input type="number" name="jumlah" placeholder="Jumlah Buku" required><br/>
  <input type="submit" name="submit" value="Tambah">
 </form>
</body>
</html>
Penjelasan
  1. Isi view tambah.php adalah form sederhana berisi inputan data buku (sesuai dengan kolom di database, ID tidak perlu diberi inputan karena sudah auto increment)
  2. Atribut form action. merujuk ke method data/buku/tambah/x/submit. parameter submit digunakan untuk mengetahui bahwa ini action form. huruf x adalah id karena pada tambah data kita tidak membutuhkan id. Namun wajib di isi karena bagian dari parameter (anda bisa isi selain huruf x)




  • pada folder yang sama buat file edit.php dengan kode berikut

  • <!DOCTYPE html>
    <html>
    <head>
     <title>Perpustakaan - Tambah buku</title>
    </head>
    <body>
     <h1>Perpustakaan</h1>
     <hr>
     <h3>Tambah Data Buku</h3>
     <form action="<?=site_url('data/buku/edit/' .$buku->id. '/submit')?>" method="POST">
      <label>Judul : </label>
      <input type="text" name="judul" placeholder="Judul Buku" value="<?=$buku->judul?>" required><br/>
      <label>Penerbit : </label>
      <input type="number" name="penerbit_id" placeholder="Nama Penerbit" value="<?=$buku->penerbit_id?>"><br/>
      <label>Pengarang : </label>
      <input type="number" name="pengarang_id" placeholder="Nama Pengarang" value="<?=$buku->pengarang_id?>"><br/>
      <label>Tahun : </label>
      <input type="number" name="tahun" placeholder="Tahun Pembuatan" value="<?=$buku->tahun?>" required><br/>
      <label>Jumlah : </label>
      <input type="number" name="jumlah" placeholder="Jumlah Buku" value="<?=$buku->jumlah?>" required><br/>
      <input type="submit" name="submit" value="Edit">
     </form>
    </body>
    </html>
    Penjelasan

    1. Isi kode hampir sama dengan file view tambah, namun ditambahkan atribut value disetiap inputan untuk menampilkan data sebelum diedit
    2. Action merujuk ke buku/edit/ID_BUKU/submit. Untuk edit, menggunakan parameter id sebagai penentu data mana yang akan di edit

    • Terakhir, Testing. akses ke localhost/perpustakaandb/data/barang. lakukan penambahan, pengeditan dan penghapusan data dengan link yang ada.

    Link download Project.
    Database sudah diekspor dengan nama perpustakaan_belajar. dan disimpan didalam folder, file berekstensi *.sql

    Perpustakaandb, 2,52Mb


    Semoga artikel kali ini dapat bermanfaat bagi anda. saya sangat berterima kasih karena anda telah berkunjung dan membaca di blog ini. Dan saya sangat senang sekali jika anda mengklik salah satu iklan oleh Google di blog ini sebagai dukungan, saya akan terus menuliskan ilmu yang saya punya mengenai IT, karena anda berhak untuk mengetahuinya secara gratis demi meningkatkan produktifitas bangsa indonesia :D.

    sekian. 

    Coding lebih mudah dengan Sublime Text + Package Control (Web Developer CI)

    5:43 AM 1 Comment


    Sublime Text, adalah salah satu dai sekian banyak text editor yang tercipta didunia ini. Mengapa sublime text begitu spesial? Entahlah, saking terlalu banyak fitur dan benefit di software Sublime Text.




    Basa Basi

    Seperti yang anda ketahui, suatu aplikasi dapat tercipta karena suatu file-file pendukung didalamnya. Melangkah lebih dalam lagi, file-file tersebut berisi perintah / kode yang di jalankan oleh komputer. Siapa yang mengetikkan kode tersebut? jawabannya adalah Programmer, programmer membuat konsep untuk memecahkan masalah tertentu, mengetikkan kode berupa bahasa pemrograman, sampai tercipta sebuah aplikasi. Aktifitas programmer yang terkenal adalah Coding yaitu mengetikkan bahasa pemrograman yang dapat dimengerti oleh komputer.

    Pada artikel kali ini, kita membahas tentang Coding dalam pembuatan Aplikasi Web. Biasanya seorang Web Developer (bukan yang laba-laba itu) menggunakan bahasa HTML,  CSS untuk UI/UX dan PHP, MySQL untuk logic web dinamis. Ada juga JavaScript sebagai pendukung keduanya.

    Perlu diketahui juga, bahwa Coding itu rumit, anda harus telaten, paham, dan mampu berfikir kritis. Misal, suatu aplikasi CodeIgniter mengelola 10 Tabel dari database, yang berarti membutuhkan 10 atau lebih File model, disetiap model tersebut kita harus mendefinisikan method untuk select, update, insert, delete, dan lain lain. Bayangkan saja, berapa banyak baris yang harus diketikkan, bagaimana rumitnya jika error terjadi karena ada kemungkinan besar seorang programmer salah mengetikkan kode (Typo). Nah, tapi itu dulu.

    Sekarang dunia coding lebih canggih lagi, dengan adanya software semacam Sublime ini, kita cukup mengetikkan cimodel, langsung muncul auto complete yang menebak apa yang anda lakukan selanjutnya, tinggal klik enter, model beserta CRUD nya akan muncul secara otomatis, bahkan kita juga bisa membuat format penulisan sendiri dan memberikan Shorthand, yang dinamakan dengan Snippet


    Menginstall Sublime Text 3 + Package Control

    • Download dulu sublime text terbaru dengan mengklik link dibawah
    Sublime Text, (~8,71 MB)
    • Copy sintaks tersebut, kemudian buka sublime text
    • Kemudian, pada sublime text tekan (CTRL + ` ) maka akan muncul semacam console sublime text
    • Paste kode sintaks tadi pada kotak console sublime text, kemudian tekan enter
    • Tekan (CTRL + SHIFT + P ), ketikkan install,
    • Maka akan muncul Package Control: Install Package, tekan enter


    • Maka akan muncul Plug in / Package yang tersedia untuk sublime text anda.

    Trik Sublime Text
    • Global



    Menginstall dan memahami Snippet CodeIgniter
    • Instalasi
      • pada Install Package tadi, ketikkan CodeIgniter, pilih CodeIgniter Snippets

      •  Klik enter untuk mengistall. Jika berhasil akan muncul notifikasi seperti dibawah



    • Cara Menggunakan
      • Membuat model, controller
    • Query Builder untuk Database
    • Load model, libary, view, helper dll.
    • Menggunakan Helper class, dengan mudah
    • Masih banyak lagi

    Memasang Snippet Twitter Bootstrap
    • Buka Package Control dengan cara Tekan CTRL+SHIFT+P ketikkan "Install Package"
      • Ketikkan Bootstrap

      • Pilih berdasarkan versi bootstrap yang anda gunakan, tekan enter
    • Cara Menggunakan



    Memasang Snippet Jquery\

    • Pemasangan
      • Buka Package Control, Pilih jQuery

    • Cara Menggunakan




    Seperti yang kita tahu, Bantuan oleh software sangatlah membantu. Membuat seorang programmer dapat mengerjakan suatu project dengan mudah, cepat dan efisien. 

    Mengintegrasikan Segala Template UI dengan CodeIgniter (Material Dashboard)

    9:21 PM 1 Comment
    Cara pakai template Codeigniter

    UI adalah singkatan dari User Interface yang berarti tampilan antarmuka yang menjembatani antara sistem dengan pengguna. di era yang semakin maju teknologi tampilan UI semakin lebih baik pula dan juga semakin mudah untuk digunakan, tentu kita sebagai Programmer atau Web Designer selalu memaksimalkan tampilan UI pada aplikasi.





    Untuk artikel kali ini, saya akan memberikan suatu tips mengintegrasikan segala macam template UI dengan CodeIgniter. UI yang akan kita gunakan adalah suatu template dari Creative Tim yang paling populer saat ini yaitu Material Dashboard.

    Saya tulis "Segala template" pada judul, karena kita tidak hanya implementasi kode, melainkan juga mempelajari konsepnya



    Sementara CodeIgniter seperti kita tahu adalah sebuah framework untuk PHP yang paling banyak digunakan di tahun 2018 ini,

    Metode pengintegrasian ini, tidak hanya menyambungkan keduanya melainkan mempelajari trik agar dapat bekerja cepat dan efisien saat proses pembuatan aplikasi.

    Sebelum anda memasuki langkah ini, untuk diperhatikan saya membuat langkah-langkah ini beserta penjelasan untuk membantu anda agar dapat memahami. Arti memahami dalam konteks ini adalah Tidak hanya copy-paste melainkan tahu konsepnya. 

    Mari kita kumpulkan bahan bahannya dulu

    CodeIgniter 3, ~2,7Mb

    Material Dashboard Template, ~1,5Mb


    Daftar Isi


    • Menyiapkan Lembar Kerja
    • Menganalisa Template (perencanaan)
    • Proses Mengintegrasikan Template
    • Selesai, sekarang membuat contoh halaman

    Menyiapkan Lembar Kerja
      • Instalasi
        • Install server seperti XAMPP atau WAMP
        • Buat folder project, (pada artikel ini: "Materialdashboard") di
          folder htdocs untuk server XAMPP atau
          folder www untuk server WAMP
        • Extract isi file codeigniter dan taruh di folder project tersebut
        • Jalankan server, coba akses folder project (localhost/materialdashboard), pastikan muncul halaman welcome CodeIgniter
      • Menghilangkan Index.php pada URL
        • Pada kondisi default CodeIgniter, URL yang dimasukkan harus ada index.php, contohnya: localhost/materialdashboard/index.php/welcome. Kita harus mengetikkan index.php pada kolom url untuk memanggil controller Welcome
        • Tambahkan file .htaccess pada folder project. Struktur folder seperti berikut

        • Didalam file .htaccess tersebut, tambahkan kode berikut

      RewriteCond $1 !^(index\.php|resources|robots\.txt)
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php/$1 [L,QSA]

      Mohon maaf sekali tidak dapat menjelaskan kode yang satu ini. kode ini bertugas sebagai engine yang mengatur URL.
        • Buka file project > application > config > config.php. Edit menggunakan text editor. Saran saya, gunakan text editor "Sublime Text".
        • Atur parameter bawaan CodeIgniter seperti dibawah.
          Untuk kotak merah yang pertama (base_url), itu adalah alamat project anda


        • Setelah diatur parameternya, jika anda mengakses dengan URL "http://localhost/materialdashboard/welcome" maka muncul halaman welcome bawaan codeigniter
      • Menambahkan helper
        • Tambahkan helper url pada autoload.php di applications/config/autoload.php, karena nantinya kita banyak menggunakan site_url() untuk mengambil url project CodeIgniter

      Menganalisa Template (Perencanaan)
      • Untuk menganalisa, kita perlu membuka halaman template. Extract template ke folder lain
      • Karena file statis, buka dengan double klik pada file html

      Konsep Dasar

      Konsep pengintegrasian cukup mudah, simak alur berikut ini: 
      1. Cari elemen yang sekiranya dapat berubah-ubah (Elemen dinamis). Misalnya: Link navigasi, Title halaman, Judul.
      2. Bagian script yang memiliki konten dinamis dipisahkan pada file view tersendiri. Sehingga kita cukup memanggilnya saja.
      3. Kemudian nilai elemen-elemen dinamis tersebut di tetapkan dari controller. Contoh skenario: Judul diambil dari database (yang berarti lewat controller juga), Link navigasi berdasarkan level user yang login dan lain sebagainya.

      Pada artikel ini, saya menemukan elemen dinamis seperti gambar dibawah


      Proses
      • Elemen sudah ditentukan, mari kita analisa dibagian source code / codingannya.
      Jika terlalu kecil, klik kanan gambar dibawah, kemudian klik open link in new tab agar bisa di zoom
          • Pada gambar diatas, 1 file html ini dipecah menjadi beberapa bagian, posisi kita coding berada pada kontennya.php dan yang lainnya kita panggil dari sini (nama file bisa yang lainnya, misal buku.php)

        Proses Mengintegrasikan Template
          • Oke, kita sudah dapat gambaran templatingnya. Sekarang langkah awal pada sistem CodeIgniter adalah membuat folder assets. Template UI membutuhkan file external pendukung seperti file JS, CSS.  File tersebut diletakkan di folder assets. Buat folder assets didalam folder project

          • Agar lebih rapi buat folder lagi didalam folder assets dan beri nama materialdashboard untuk mendefinisikan nama plugin. Jaga-jaga jika nantinya ada file pendukung / plug-in lain, kita bisa taruh di folder assets ini.

            • Buka file html di template tadi dengan text editor. Nantinya kita akan copy-paste perbagian yang telah dipecah tadi ke file view di CodeIgniter
            • Pada folder project masuk ke folder application/views buat folder template kemudian buat 4 file tadi (header.php, footer.php, js_script.php, navigation.php) didalam folder template
              • kita kerjakan file header.php terlebih dahulu, Copy-paste dari file html template tadi sesuai dengan pembagian yang direncanakan. Sehingga isinya seperti berikut
                <!doctype html>
                <html lang="en">
                <head>
                    <meta charset="utf-8" />
                    <link rel="apple-touch-icon" sizes="76x76" href="assets/img/apple-icon.png">
                    <link rel="icon" type="image/png" href="assets/img/favicon.png">
                    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
                    <title>
                        <?=$ui_title?>
                    </title>
                    <meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no' name='viewport' />
                    <!--     Fonts and icons     -->
                    <link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Slab:400,700|Material+Icons" />
                    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css">
                    <link rel="stylesheet" href="<?=site_url('assets/custom/css/default.css)?>">
                    <!-- CSS Files -->
                    <link href="<?=site_url('assets/materialdashboard/css/')?>material-dashboard.css?v=2.1.0" rel="stylesheet" />
                    <?php 
                        foreach ($ui_css as $css) {
                    ?>
                    <link rel="stylesheet" type="text/css" href="<?=site_url('assets/' .$css)?>">
                    <?php
                        }
                    ?>
                </head>
                
                <body class="">
                    <div class="wrapper">

                Penjelasan
                  • pada elemen dinamis, buat kode php untuk menampilkan variabel. misal pada elemen <title> saya tampilkan variabel $ui_title. $ui_title ini nantinya ditetapkan pada controller
                  • Sedikit berbeda dengan bagian CSS, karena variabel css dapat berisi lebih dari satu / array. Maka ditampilkan menggunakan foreach

                  • kemudian kita akan melanjutkan navigation.php, Isi kode sesuai dengan bagian diatas tadi

                    <div class="sidebar" data-color="purple" data-background-color="white">
                        <!--
                        Tip 1: You can change the color of the sidebar using: data-color="purple | azure | green | orange | danger"
                        Tip 2: you can also add an image using data-image tag
                        -->
                        <div class="logo">
                            <a href="<?=base_url()?>" class="simple-text logo-normal">
                                <?=$ui_app_name?>
                            </a>
                        </div>
                        <div class="sidebar-wrapper">
                            <ul class="nav">
                                <?php 
                                    foreach ($ui_sidebar_nav as $nav) {
                                        $nav = explode('|', $nav);
                                        $class = '';
                                        if ($nav[0] == $ui_sidebar_active) {
                                            $class = 'active';
                                        }
                                        else {
                                            $class = '';
                                        }
                                ?>
                                <li class="nav-item <?=$class?>">
                                    <a class="nav-link" href="<?=$nav[2]?>">
                                        <i class="material-icons"><?=$nav[1]?></i>
                                        <p><?=$nav[0]?></p>
                                    </a>
                                </li>
                                <?php
                                    }
                                ?>
                            </ul>
                        </div>
                        <div class="sidebar-background" style="background-image: url('<?=site_url('assets/materialdashboard/img/sidebar-1.jpg')?>') "></div>
                    </div>
                    <div class="main-panel">
                        <nav class="navbar navbar-expand-lg navbar-transparent navbar-absolute fixed-top ">
                            <div class="container-fluid">
                                <div class="navbar-wrapper">
                                    <a class="navbar-brand" href="#pablo">Dashboard</a>
                                </div>
                                <button class="navbar-toggler" type="button" data-toggle="collapse" aria-controls="navigation-index" aria-expanded="false" aria-label="Toggle navigation">
                                    <span class="sr-only">Toggle navigation</span>
                                    <span class="navbar-toggler-icon icon-bar"></span>
                                    <span class="navbar-toggler-icon icon-bar"></span>
                                    <span class="navbar-toggler-icon icon-bar"></span>
                                </button>
                                <div class="collapse navbar-collapse justify-content-end">
                                    <ul class="navbar-nav"> 
                                        <?php 
                                            foreach ($ui_top_nav as $top_nav) {
                                                $nav_top = explode('|', $top_nav);
                                                $nav_top_title = $nav_top[0];
                                                $nav_top_icon = $nav_top[1];
                                                $nav_top_link = $nav_top[2];
                    
                                                if ($ui_top_nav_active == $nav_top_title) {
                                                    $nav_top_class = 'active';
                                                }
                                                else {
                                                    $nav_top_class = '';
                                                }
                                        ?>
                                        <li class="nav-item <?=$nav_top_class?>"> 
                                            <a class="nav-link" href="<?=$nav_top_link?>">
                                                <i class="material-icons"><?=$nav_top_icon?></i> <?=$nav_top_title?>
                                            </a>
                                        </li>
                                        <?php 
                                            }
                                        ?>
                                    </ul>
                                </div>
                            </div>
                        </nav>
                        <div class="content">


                    Penjelasan
                      • Ada 3 elemen dinamis pada file ini, yaitu judul, navigasi sidebar, navigasi atas.
                      • Judul ditampilkan dengan mudah dengan variabel $ui_app_name
                      • Berbeda dengan kedua navigasi, terdapat data lebih dari 1, dan memiliki atribut seperti Teks, ikon dan linknya. Untuk mengatasi ini saya gunakan formatting pada setiap isi array menjadi array("Teks|Ikon|Link")
                      • Pada navigasi Material Dashboard juga terdapat status Active, maka saya buat juga variabel dari controller yang mendefinisikan mana item navigasi yang sedang aktif. 
                      • untuk mencari mana navigasi yang aktif, saya tambahkan pengkondisian (IF) disetiap perulangan link. Jika sama, link itulah yang aktif.

                    • File js_script.php. file ini hanya berisi konten dinamis load script javascript. jika tadi kita bisa load css lewat controller, maka kita juga bisa me-load file javascript juga, inilah fungsi dari file ini. Mengapa tidak kita satukan dengan footer.?, karena ada kemungkinan kita menulis script embedded (seperti jquery) di setiap halaman yang berbeda. dan suatu script embedded harus terletak setelah load script. Maka pada halaman konten, kita bisa menulis script js embedded setelah kita memanggil js_script.php. 
                      • oh iya, pada script ini kita akan menutup tag div wrapper juga karena tidak ada file konten lagi setelah file ini kurang lebih isi dari file js_script seperti berikut: 

                            </div> <!-- Penutup dari div.content -->
                        </div> <!-- Penutup dari div.main-panel -->
                    </div> <!-- Penutup dari div.wrapper -->
                    <!--   Core JS Files   -->
                    <script src="<?=site_url('assets/materialdashboard/')?>/js/core/jquery.min.js" type="text/javascript"></script>
                    <script src="<?=site_url('assets/materialdashboard/')?>/js/core/popper.min.js" type="text/javascript"></script>
                    <script src="<?=site_url('assets/materialdashboard/')?>/js/core/bootstrap-material-design.min.js" type="text/javascript"></script>
                    <script src="<?=site_url('assets/materialdashboard/')?>/js/plugins/perfect-scrollbar.jquery.min.js"></script>
                    
                    <!-- Chartist JS -->
                    <script src="<?=site_url('assets/materialdashboard/')?>/js/plugins/chartist.min.js"></script>
                    <!--  Notifications Plugin    -->
                    <script src="<?=site_url('assets/materialdashboard/')?>/js/plugins/bootstrap-notify.js"></script>
                    <!-- Control Center for Material Dashboard: parallax effects, scripts for the example pages etc -->
                    <script src="<?=site_url('assets/materialdashboard/')?>/js/material-dashboard.min.js?v=2.1.0" type="text/javascript"></script>
                    
                    <?php 
                    foreach ($ui_js as $js) {
                        ?>
                        <script type="text/javascript" src="<?=site_url('assets/' .$js)?>"></script>
                        <?php
                    }
                    ?>


                    Penjelasan
                      • kita ganti src dari script bawaan template karena CodeIgniter membutuhkan helper site_url(lokasi/filejs) 
                      • kemudian kita menggunakan variabel array $ui_js yang nantinya kita isi di controller, variabel tersebut di keluarkan pada file ini menggunakan perulangan foreach


                      • File Footer.php, File footer hanya berisi akhiran dokumen seperti </body></html>. file ini dipisahkan dengan js_script karena ada kemungkinan kita menuliskan embedded js script diantara 2 file tersebut. file tersebut berisi seperti berikut

                        </body>
                        </html>



                        Selesai, Sekarang membuat contoh halaman
                        • membuat controller pada CI.
                          sebagai contoh, kita akan membuat data buku. pada applications/controllers/ buat file bernama Data.php (karena aturan pembuatan kelas ci harus huruf kapital)
                          • buat method / fungsi buku. pada fungsi ini kita menyiapkan atribut ui yang telah kita buat tadi. pada templating yang kita buat, kita sudah mendefinisikan variabel berikut:
                            • $ui_app_name   (Judul Aplikasi di atas sidebar)
                            • $ui_title  (title pada head / judul tab)
                            • $ui_css (berupa array, mendefinisikan css yang akan kita gunakan)
                            • $ui_js (berupa array, mendefinisikan js yang akan kita gunakan)
                            • $ui_sidebar_nav (berupa array, mendefinisikan link-link sidebar)
                            • $ui_sidebar_active (adalah nav yang sedang aktif)
                            • $ui_top_nav (berupa array, mendefinisikan link-link nav atas)
                            • $ui_top_nav_active (mendefinisikan nav yang sedang aktif)
                            • tinggal kita isi saja, isi controller-nya seperti berikut:

                              <?php 
                              class Data extends CI_Controller {
                               public function buku()
                               {
                                $data['ui_app_name'] = 'Perpus-Sys';
                                $data['ui_title'] = 'Perpus-Sys - Data Buku';
                              
                                $data['ui_css'] = array('custom/css/default.css');
                                $data['ui_js'] = array();
                                // ----------------------------
                                // format penulisan: array(
                                //   'Teks|ikon|alamat_link', 
                                // );
                                // ----------------------------
                                $data['ui_sidebar_nav'] = array(
                                 'Data Buku|book|' .site_url('data/buku'),
                                 'Data Siswa|face|' .site_url('data/siswa'),
                                );
                                $data['ui_top_nav'] = array(
                                 'Buku|book|' .site_url('data/buku'),
                                 'Pegawai|face|' .site_url('data/Pegawai')
                                );
                                $data['ui_sidebar_active'] = 'Data Buku';
                                $data['ui_top_nav_active'] = 'Pegawai';
                                $this->load->view('data/buku/daftar', $data);
                               }
                              
                              }
                              ?>
                              • controller sudah jadi, tinggal kita buat view. pada kode controller diatas kita sudah tulis load view ke data/buku/daftar. berarti kita tinggal buat saja filenya di applications/views/

                                • tinggal kita panggil saja file file tersebut berdasarkan template aslinya. anda bisa memulai membuat tata letak sesuai dengan kebutuhan anda. untuk membuat UI silahkan baca dokumentasi dari template ini. contoh seperti saya dibawah sedang membuat daftar buku yang memuat tabel saja seperti dibawah: 

                                  <?php $this->view('template/header.php')?>
                                  <?php $this->view('template/sidebar.php')?>
                                  
                                  <div class="content">
                                    <div class="row">
                                      <div class="col-sm-12">
                                        <div class="card">
                                          <div class="card-header card-header-primary">
                                            <h4 class="card-title">Daftar Buku Tersedia</h4>
                                          </div>
                                          <div class="card-body">
                                            <div class="table-responsive">
                                              <table class="table table-striped table-hover">
                                                <thead>
                                                  <tr>
                                                    <th>No</th>
                                                    <th>Judul</th>
                                                    <th>Penulis</th>
                                                    <th>Stok</th>
                                                    <th>Penerbit</th>
                                                  </tr>
                                                </thead>
                                                <tbody>
                                                  <tr>
                                                    <td>1</td>
                                                    <td>HTML Dasar</td>
                                                    <td>Badar Wildanie</td>
                                                    <td>12</td>
                                                    <td>BLogspot</td>
                                                  </tr>
                                                  <tr>
                                                    <td>2</td>
                                                    <td>Webmastering dalam 1 bulan</td>
                                                    <td>Seseorang</td>
                                                    <td>551</td>
                                                    <td>Elexmedia</td>
                                                  </tr>
                                                  <tr>
                                                    <td>3</td>
                                                    <td>Belajar Google Adsense</td>
                                                    <td>Seseorang Juga</td>
                                                    <td>22</td>
                                                    <td>Elexmedia</td>
                                                  </tr>
                                                </tbody>
                                              </table>
                                            </div>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                  
                                    <?php $this->view('template/js_script.php') ?>
                                    <script type="text/javascript">
                                  
                                  // Script Javascript DISINI
                                  
                                  </script>
                                  <?php $this->view('template/footer.php')?>
                                  • semua sudah selesai tinggal kita akses lewat browser.


                                    Link Project
                                    Material Dashboard (Sudah diperbarui), ~4 MB


                                    bisa simpulkan dari trik diatas, bahwa kita tidak harus menuliskan elemen-elemen berulang kali.
                                    misal menuliskan link sidebar berulang kali, menuliskan judul aplikasi disetiap view yang kita tulis. Namun kita cukup memanggil file view saja yang memuat elemen-elemen berulang tersebut dan dapat diatur secara dinamis langsung dari controller.

                                    Hal ini memungkinkan kita saat mengerjakan suatu project hanya berfokus kepada konten-konten utama tanpa harus meladeni elemen tersebut. Sehingga kita hanya fokus tentang halaman CRUD dan logic sistemnya pada controller dan model.

                                    Anda juga dapat bereksperimen lebih jauh lagi, seperti membuat konfigurasi, yang datanya tersimpan pada database dengan menerapkan cara diatas.

                                    Saya harap anda dapat mengerti dengan trik yang saya tuliskan diatas. dan juga semoga bisa bermanfaat untuk anda. sebagai informasi saja, saya menggunakan teknik ini, hasilnya dapat mengurangi durasi project 1 orang (sistem inventory dan penjualan) yang awalnya 1 bulan menjadi 15 hari saja. Namun tidak dengan trik ini saja, Ada banyak trik yang saya gunakan, maka dari itu
                                    Stay Tune, Bookmark laman ini, karena saya akan terus menuliskan pada artikel selanjutnya.

                                    Sekian.