Skip to main content

PWEB-FRAMEWORK


Nama : Bobbi Aditya
Kelas : PWEB C
NRP : 05111740000099

Dalam kesempatan kali ini, saya melanjutkan tutorial dari petanikode dari tutorial 4 sampai tutorial 6

Dalam tutorial 4, saya belajar untuk melakukan partisi-partisi dalam tampilan index website. Saya melakukan partisi halaman menjadi 7 partisi.

Berikut adalah source code dari masing-masing partisi:
-head.php
 <meta charset="utf-8">  
 <meta http-equiv="X-UA-Compatible" content="IE=edge">  
 <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">  
 <title><?php echo SITE_NAME .": ". ucfirst($this->uri->segment(1)) ." - ". ucfirst($this->uri->segment(2)) ?></title>  
 <!-- Bootstrap core CSS-->  
 <link href="<?php echo base_url('assets/bootstrap/css/bootstrap.min.css') ?>" rel="stylesheet">  
 <!-- Custom fonts for this template-->  
 <link href="<?php echo base_url('assets/fontawesome-free/css/all.min.css') ?>" rel="stylesheet" type="text/css">  
 <!-- Page level plugin CSS-->  
 <link href="<?php echo base_url('assets/datatables/dataTables.bootstrap4.css') ?>" rel="stylesheet">  
 <!-- Custom styles for this template-->  
 <link href="<?php echo base_url('css/sb-admin.css') ?>" rel="stylesheet">  

-navbar.php
 <nav class="navbar navbar-expand navbar-dark bg-success static-top">  
   <a class="navbar-brand mr-1" href="<?php echo site_url('admin') ?>"><?php echo SITE_NAME ?></a>  
   <button class="btn btn-link btn-sm text-white order-1 order-sm-0" id="sidebarToggle" href="#">  
     <i class="fas fa-bars"></i>  
   </button>  
   <!-- Navbar Search -->  
   <form class="d-none d-md-inline-block form-inline ml-auto mr-0 mr-md-3 my-2 my-md-0">  
     <div class="input-group">  
       <input type="text" class="form-control" placeholder="Search for..." aria-label="Search" aria-describedby="basic-addon2">  
       <div class="input-group-append">  
         <button class="btn btn-light" type="button">  
           <i class="fas fa-search"></i>  
         </button>  
       </div>  
     </div>  
   </form>  
   <!-- Navbar -->  
   <ul class="navbar-nav ml-auto ml-md-0">  
     <li class="nav-item dropdown no-arrow mx-1">  
       <a class="nav-link dropdown-toggle" href="#" id="alertsDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"  
         aria-expanded="false">  
         <i class="fas fa-bell fa-fw"></i>  
         <span class="badge badge-danger">9+</span>  
       </a>  
       <div class="dropdown-menu dropdown-menu-right" aria-labelledby="alertsDropdown">  
         <a class="dropdown-item" href="#">Action</a>  
         <a class="dropdown-item" href="#">Another action</a>  
         <div class="dropdown-divider"></div>  
         <a class="dropdown-item" href="#">Something else here</a>  
       </div>  
     </li>  
     <li class="nav-item dropdown no-arrow mx-1">  
       <a class="nav-link dropdown-toggle" href="#" id="messagesDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"  
         aria-expanded="false">  
         <i class="fas fa-envelope fa-fw"></i>  
         <span class="badge badge-danger">7</span>  
       </a>  
       <div class="dropdown-menu dropdown-menu-right" aria-labelledby="messagesDropdown">  
         <a class="dropdown-item" href="#">Action</a>  
         <a class="dropdown-item" href="#">Another action</a>  
         <div class="dropdown-divider"></div>  
         <a class="dropdown-item" href="#">Something else here</a>  
       </div>  
     </li>  
     <li class="nav-item dropdown no-arrow">  
       <a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"  
         aria-expanded="false">  
         <i class="fas fa-user-circle fa-fw"></i> Admin  
       </a>  
       <div class="dropdown-menu dropdown-menu-right" aria-labelledby="userDropdown">  
         <a class="dropdown-item" href="#">Settings</a>  
         <a class="dropdown-item" href="#">Activity Log</a>  
         <div class="dropdown-divider"></div>  
         <a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal">Logout</a>  
       </div>  
     </li>  
   </ul>  
 </nav>  

-sidebar.php
 <!-- Sidebar -->  
 <ul class="sidebar navbar-nav">  
   <li class="nav-item <?php echo $this->uri->segment(2) == '' ? 'active': '' ?>">  
     <a class="nav-link" href="<?php echo site_url('admin') ?>">  
       <i class="fas fa-fw fa-tachometer-alt"></i>  
       <span>Overview</span>  
     </a>  
   </li>  
   <li class="nav-item dropdown <?php echo $this->uri->segment(2) == 'products' ? 'active': '' ?>">  
     <a class="nav-link dropdown-toggle" href="#" id="pagesDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"  
       aria-expanded="false">  
       <i class="fas fa-fw fa-boxes"></i>  
       <span>Products</span>  
     </a>  
     <div class="dropdown-menu" aria-labelledby="pagesDropdown">  
       <a class="dropdown-item" href="<?php echo site_url('admin/products/add') ?>">New Product</a>  
       <a class="dropdown-item" href="<?php echo site_url('admin/products') ?>">List Product</a>  
     </div>  
   </li>  
   <li class="nav-item">  
     <a class="nav-link" href="#">  
       <i class="fas fa-fw fa-users"></i>  
       <span>Users</span></a>  
   </li>  
   <li class="nav-item">  
     <a class="nav-link" href="#">  
       <i class="fas fa-fw fa-cog"></i>  
       <span>Settings</span></a>  
   </li>  
 </ul>  

-breadcrumb.php
 <!-- Breadcrumbs-->  
 <ol class="breadcrumb">  
 <?php foreach ($this->uri->segments as $segment): ?>  
      <?php   
           $url = substr($this->uri->uri_string, 0, strpos($this->uri->uri_string, $segment)) . $segment;  
           $is_active = $url == $this->uri->uri_string;  
      ?>  
      <li class="breadcrumb-item <?php echo $is_active ? 'active': '' ?>">  
           <?php if($is_active): ?>  
                <?php echo ucfirst($segment) ?>  
           <?php else: ?>  
                <a href="<?php echo site_url($url) ?>"><?php echo ucfirst($segment) ?></a>  
           <?php endif; ?>  
      </li>  
 <?php endforeach; ?>  
 </ol>  

-footer.php
 <!-- Sticky Footer -->  
 <footer class="sticky-footer">  
  <div class="container my-auto">  
   <div class="copyright text-center my-auto">  
    <span>Copyright <?php echo SITE_NAME ." ". Date('Y') ?></span>  
   </div>  
  </div>  
 </footer>  

-modal.php
 <!-- Logout Modal-->  
 <div class="modal fade" id="logoutModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">  
  <div class="modal-dialog" role="document">  
   <div class="modal-content">  
    <div class="modal-header">  
     <h5 class="modal-title" id="exampleModalLabel">Ready to Leave?</h5>  
     <button class="close" type="button" data-dismiss="modal" aria-label="Close">  
      <span aria-hidden="true">×</span>  
     </button>  
    </div>  
    <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>  
    <div class="modal-footer">  
     <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>  
     <a class="btn btn-primary" href="login.html">Logout</a>  
    </div>  
   </div>  
  </div>  
 </div>  
 <!-- Logout Delete Confirmation-->  
 <div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">  
  <div class="modal-dialog" role="document">  
   <div class="modal-content">  
    <div class="modal-header">  
     <h5 class="modal-title" id="exampleModalLabel">Are you sure?</h5>  
     <button class="close" type="button" data-dismiss="modal" aria-label="Close">  
      <span aria-hidden="true">×</span>  
     </button>  
    </div>  
    <div class="modal-body">Data yang dihapus tidak akan bisa dikembalikan.</div>  
    <div class="modal-footer">  
     <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>  
     <a id="btn-delete" class="btn btn-danger" href="#">Delete</a>  
    </div>  
   </div>  
  </div>  
 </div>  

-js.php
 <!-- Bootstrap core JavaScript-->  
 <script src="<?php echo base_url('assets/jquery/jquery.min.js') ?>"></script>  
 <script src="<?php echo base_url('assets/bootstrap/js/bootstrap.bundle.min.js') ?>"></script>  
 <!-- Core plugin JavaScript-->  
 <script src="<?php echo base_url('assets/jquery-easing/jquery.easing.min.js') ?>"></script>  
 <!-- Page level plugin JavaScript-->  
 <script src="<?php echo base_url('assets/chart.js/Chart.min.js') ?>"></script>  
 <script src="<?php echo base_url('assets/datatables/jquery.dataTables.js') ?>"></script>  
 <script src="<?php echo base_url('assets/datatables/dataTables.bootstrap4.js') ?>"></script>  
 <!-- Custom scripts for all pages-->  
 <script src="<?php echo base_url('js/sb-admin.min.js') ?>"></script>  
 <!-- Demo scripts for this page-->  
 <script src="<?php echo base_url('js/demo/datatables-demo.js') ?>"></script>  
 <script src="<?php echo base_url('js/demo/chart-area-demo.js') ?>"></script>  
Setelah itu ubah overview.php menjadi
 <!DOCTYPE html>  
 <html lang="en">  
 <head>  
      <?php $this->load->view("admin/_partials/head.php") ?>  
 </head>  
 <body id="page-top">  
 <?php $this->load->view("admin/_partials/navbar.php") ?>  
 <div id="wrapper">  
      <?php $this->load->view("admin/_partials/sidebar.php") ?>  
      <div id="content-wrapper">  
           <div class="container-fluid">  
     <!--   
     karena ini halaman overview (home), kita matikan partial breadcrumb.  
     Jika anda ingin mengampilkan breadcrumb di halaman overview,  
     silahkan hilangkan komentar (//) di tag PHP di bawah.  
     -->  
           <?php //$this->load->view("admin/_partials/breadcrumb.php") ?>  
           <!-- Icon Cards-->  
           <div class="row">  
                <div class="col-xl-3 col-sm-6 mb-3">  
                <div class="card text-white bg-primary o-hidden h-100">  
                     <div class="card-body">  
                     <div class="card-body-icon">  
                          <i class="fas fa-fw fa-comments"></i>  
                     </div>  
                     <div class="mr-5">26 New Messages!</div>  
                     </div>  
                     <a class="card-footer text-white clearfix small z-1" href="#">  
                     <span class="float-left">View Details</span>  
                     <span class="float-right">  
                          <i class="fas fa-angle-right"></i>  
                     </span>  
                     </a>  
                </div>  
                </div>  
                <div class="col-xl-3 col-sm-6 mb-3">  
                <div class="card text-white bg-warning o-hidden h-100">  
                     <div class="card-body">  
                     <div class="card-body-icon">  
                          <i class="fas fa-fw fa-list"></i>  
                     </div>  
                     <div class="mr-5">11 New Tasks!</div>  
                     </div>  
                     <a class="card-footer text-white clearfix small z-1" href="#">  
                     <span class="float-left">View Details</span>  
                     <span class="float-right">  
                          <i class="fas fa-angle-right"></i>  
                     </span>  
                     </a>  
                </div>  
                </div>  
                <div class="col-xl-3 col-sm-6 mb-3">  
                <div class="card text-white bg-success o-hidden h-100">  
                     <div class="card-body">  
                     <div class="card-body-icon">  
                          <i class="fas fa-fw fa-shopping-cart"></i>  
                     </div>  
                     <div class="mr-5">123 New Orders!</div>  
                     </div>  
                     <a class="card-footer text-white clearfix small z-1" href="#">  
                     <span class="float-left">View Details</span>  
                     <span class="float-right">  
                          <i class="fas fa-angle-right"></i>  
                     </span>  
                     </a>  
                </div>  
                </div>  
                <div class="col-xl-3 col-sm-6 mb-3">  
                <div class="card text-white bg-danger o-hidden h-100">  
                     <div class="card-body">  
                     <div class="card-body-icon">  
                          <i class="fas fa-fw fa-life-ring"></i>  
                     </div>  
                     <div class="mr-5">13 New Tickets!</div>  
                     </div>  
                     <a class="card-footer text-white clearfix small z-1" href="#">  
                     <span class="float-left">View Details</span>  
                     <span class="float-right">  
                          <i class="fas fa-angle-right"></i>  
                     </span>  
                     </a>  
                </div>  
                </div>  
           </div>  
           <!-- Area Chart Example-->  
           <div class="card mb-3">  
                <div class="card-header">  
                <i class="fas fa-chart-area"></i>  
                Visitor Stats</div>  
                <div class="card-body">  
                <canvas id="myAreaChart" width="100%" height="30"></canvas>  
                </div>  
                <div class="card-footer small text-muted">Updated yesterday at 11:59 PM</div>  
           </div>  
           </div>  
           <!-- /.container-fluid -->  
           <!-- Sticky Footer -->  
           <?php $this->load->view("admin/_partials/footer.php") ?>  
      </div>  
      <!-- /.content-wrapper -->  
 </div>  
 <!-- /#wrapper -->  
 <?php $this->load->view("admin/_partials/scrolltop.php") ?>  
 <?php $this->load->view("admin/_partials/modal.php") ?>  
 <?php $this->load->view("admin/_partials/js.php") ?>  
 </body>  
 </html>  

Setelah itu, saya mencoba untuk membuat database dan menyambungkannya dengan codeignitier, untuk membuat database ini kita harus mengubah config yang ada menjadi:
 <?php  
 defined('BASEPATH') OR exit('No direct script access allowed');  
 /*  
 | -------------------------------------------------------------------  
 | DATABASE CONNECTIVITY SETTINGS  
 | -------------------------------------------------------------------  
 | This file will contain the settings needed to access your database.  
 |  
 | For complete instructions please consult the 'Database Connection'  
 | page of the User Guide.  
 |  
 | -------------------------------------------------------------------  
 | EXPLANATION OF VARIABLES  
 | -------------------------------------------------------------------  
 |  
 |     ['dsn']   The full DSN string describe a connection to the database.  
 |     ['hostname'] The hostname of your database server.  
 |     ['username'] The username used to connect to the database  
 |     ['password'] The password used to connect to the database  
 |     ['database'] The name of the database you want to connect to  
 |     ['dbdriver'] The database driver. e.g.: mysqli.  
 |               Currently supported:  
 |                     cubrid, ibase, mssql, mysql, mysqli, oci8,  
 |                     odbc, pdo, postgre, sqlite, sqlite3, sqlsrv  
 |     ['dbprefix'] You can add an optional prefix, which will be added  
 |                     to the table name when using the Query Builder class  
 |     ['pconnect'] TRUE/FALSE - Whether to use a persistent connection  
 |     ['db_debug'] TRUE/FALSE - Whether database errors should be displayed.  
 |     ['cache_on'] TRUE/FALSE - Enables/disables query caching  
 |     ['cachedir'] The path to the folder where cache files should be stored  
 |     ['char_set'] The character set used in communicating with the database  
 |     ['dbcollat'] The character collation used in communicating with the database  
 |                     NOTE: For MySQL and MySQLi databases, this setting is only used  
 |                      as a backup if your server is running PHP < 5.2.3 or MySQL < 5.0.7  
 |                     (and in table creation queries made with DB Forge).  
 |                      There is an incompatibility in PHP with mysql_real_escape_string() which  
 |                      can make your site vulnerable to SQL injection if you are using a  
 |                      multi-byte character set and are running versions lower than these.  
 |                      Sites using Latin-1 or UTF-8 database character set and collation are unaffected.  
 |     ['swap_pre'] A default table prefix that should be swapped with the dbprefix  
 |     ['encrypt'] Whether or not to use an encrypted connection.  
 |  
 |               'mysql' (deprecated), 'sqlsrv' and 'pdo/sqlsrv' drivers accept TRUE/FALSE  
 |               'mysqli' and 'pdo/mysql' drivers accept an array with the following options:  
 |  
 |                    'ssl_key'  - Path to the private key file  
 |                    'ssl_cert'  - Path to the public key certificate file  
 |                    'ssl_ca'   - Path to the certificate authority file  
 |                    'ssl_capath' - Path to a directory containing trusted CA certificates in PEM format  
 |                    'ssl_cipher' - List of *allowed* ciphers to be used for the encryption, separated by colons (':')  
 |                    'ssl_verify' - TRUE/FALSE; Whether verify the server certificate or not ('mysqli' only)  
 |  
 |     ['compress'] Whether or not to use client compression (MySQL only)  
 |     ['stricton'] TRUE/FALSE - forces 'Strict Mode' connections  
 |                                   - good for ensuring strict SQL while developing  
 |     ['ssl_options']     Used to set various SSL options that can be used when making SSL connections.  
 |     ['failover'] array - A array with 0 or more data for connections if the main should fail.  
 |     ['save_queries'] TRUE/FALSE - Whether to "save" all executed queries.  
 |                     NOTE: Disabling this will also effectively disable both  
 |                     $this->db->last_query() and profiling of DB queries.  
 |                     When you run a query, with this setting set to TRUE (default),  
 |                     CodeIgniter will store the SQL statement for debugging purposes.  
 |                     However, this may cause high memory usage, especially if you run  
 |                     a lot of SQL queries ... disable this to avoid that problem.  
 |  
 | The $active_group variable lets you choose which connection group to  
 | make active. By default there is only one group (the 'default' group).  
 |  
 | The $query_builder variables lets you determine whether or not to load  
 | the query builder class.  
 */  
 $active_group = 'default';  
 $query_builder = TRUE;  
 $db['default'] = array(  
      'dsn'     => '',  
      'hostname' => 'localhost',  
      'username' => 'root',  
      'password' => '',  
      'database' => 'tokobuah',  
      'dbdriver' => 'mysqli',  
      'dbprefix' => '',  
      'pconnect' => FALSE,  
      'db_debug' => (ENVIRONMENT !== 'production'),  
      'cache_on' => FALSE,  
      'cachedir' => '',  
      'char_set' => 'utf8',  
      'dbcollat' => 'utf8_general_ci',  
      'swap_pre' => '',  
      'encrypt' => FALSE,  
      'compress' => FALSE,  
      'stricton' => FALSE,  
      'failover' => array(),  
      'save_queries' => TRUE  
 );  
Setelah membuat config seperti itu, kita sudah bisa membuat halam edit, halaman tampilan tabel, halaman untuk delete dll. (Untuk tutorial lebih lengkapnya bisa di lihat di link ini)

Kemudian kita menambahkan database dan session pada config/autoload .php

Sekarang kita harus membuat model untuk model kita, codingannya adalah seperti ini:
 <?php defined('BASEPATH') OR exit('No direct script access allowed');  
 class Product_model extends CI_Model  
 {  
   private $_table = "products";  
   public $product_id;  
   public $name;  
   public $price;  
   public $image = "default.jpg";  
   public $description;  
   public function rules()  
   {  
     return [  
       ['field' => 'name',  
       'label' => 'Name',  
       'rules' => 'required'],  
       ['field' => 'price',  
       'label' => 'Price',  
       'rules' => 'numeric'],  
       ['field' => 'description',  
       'label' => 'Description',  
       'rules' => 'required']  
     ];  
   }  
   public function getAll()  
   {  
     return $this->db->get($this->_table)->result();  
   }  
   public function getById($id)  
   {  
     return $this->db->get_where($this->_table, ["product_id" => $id])->row();  
   }  
   public function save()  
   {  
     $post = $this->input->post();  
     $this->product_id = uniqid();  
     $this->name = $post["name"];  
           $this->price = $post["price"];  
           $this->image = $this->_uploadImage();  
     $this->description = $post["description"];  
     $this->db->insert($this->_table, $this);  
   }  
   public function update()  
   {  
     $post = $this->input->post();  
     $this->product_id = $post["id"];  
     $this->name = $post["name"];  
           $this->price = $post["price"];  
           if (!empty($_FILES["image"]["name"])) {  
       $this->image = $this->_uploadImage();  
     } else {  
       $this->image = $post["old_image"];  
           }  
     $this->description = $post["description"];  
     $this->db->update($this->_table, $this, array('product_id' => $post['id']));  
   }  
   public function delete($id)  
   {  
           $this->_deleteImage($id);  
     return $this->db->delete($this->_table, array("product_id" => $id));  
      }  
      private function _uploadImage()  
      {  
           $config['upload_path']     = './upload/product/';  
           $config['allowed_types']    = 'gif|jpg|png';  
           $config['file_name']      = $this->product_id;  
           $config['overwrite']               = true;  
           $config['max_size']       = 1024; // 1MB  
           // $config['max_width']      = 1024;  
           // $config['max_height']      = 768;  
           $this->load->library('upload', $config);  
           if ($this->upload->do_upload('image')) {  
                return $this->upload->data("file_name");  
           }  
           return "default.jpg";  
      }  
      private function _deleteImage($id)  
      {  
           $product = $this->getById($id);  
           if ($product->image != "default.jpg") {  
                $filename = explode(".", $product->image)[0];  
                return array_map('unlink', glob(FCPATH."upload/product/$filename.*"));  
           }  
      }  
 }  

Setelah itu kita membuat controller pada /application/controllers/admin dengan nama Products.php, source codenya sebagai berikut:
 <?php  
 defined('BASEPATH') OR exit('No direct script access allowed');  
 class Products extends CI_Controller  
 {  
   public function __construct()  
   {  
     parent::__construct();  
     $this->load->model("product_model");  
     $this->load->library('form_validation');  
   }  
   public function index()  
   {  
     $data["products"] = $this->product_model->getAll();  
     $this->load->view("admin/product/list", $data);  
   }  
   public function add()  
   {  
     $product = $this->product_model;  
     $validation = $this->form_validation;  
     $validation->set_rules($product->rules());  
     if ($validation->run()) {  
       $product->save();  
       $this->session->set_flashdata('success', 'Berhasil disimpan');  
     }  
     $this->load->view("admin/product/new_form");  
   }  
   public function edit($id = null)  
   {  
     if (!isset($id)) redirect('admin/products');  
     $product = $this->product_model;  
     $validation = $this->form_validation;  
     $validation->set_rules($product->rules());  
     if ($validation->run()) {  
       $product->update();  
       $this->session->set_flashdata('success', 'Berhasil disimpan');  
     }  
     $data["product"] = $product->getById($id);  
     if (!$data["product"]) show_404();  
     $this->load->view("admin/product/edit_form", $data);  
   }  
   public function delete($id=null)  
   {  
     if (!isset($id)) show_404();  
     if ($this->product_model->delete($id)) {  
       redirect(site_url('admin/products'));  
     }  
   }  
 }  

Setelah itu kita membuat tiga macam view pada views/admin/product/ :
-list.php
 <!DOCTYPE html>  
 <html lang="en">  
 <head>  
      <?php $this->load->view("admin/_partials/head.php") ?>  
 </head>  
 <body id="page-top">  
      <?php $this->load->view("admin/_partials/navbar.php") ?>  
      <div id="wrapper">  
           <?php $this->load->view("admin/_partials/sidebar.php") ?>  
           <div id="content-wrapper">  
                <div class="container-fluid">  
                     <?php $this->load->view("admin/_partials/breadcrumb.php") ?>  
                     <!-- DataTables -->  
                     <div class="card mb-3">  
                          <div class="card-header">  
                               <a href="<?php echo site_url('admin/products/add') ?>"><i class="fas fa-plus"></i> Add New</a>  
                          </div>  
                          <div class="card-body">  
                               <div class="table-responsive">  
                                    <table class="table table-hover" id="dataTable" width="100%" cellspacing="0">  
                                         <thead>  
                                              <tr>  
                                                   <th>Name</th>  
                                                   <th>Price</th>  
                                                   <th>Photo</th>  
                                                   <th>Description</th>  
                                                   <th>Action</th>  
                                              </tr>  
                                         </thead>  
                                         <tbody>  
                                              <?php foreach ($products as $product): ?>  
                                              <tr>  
                                                   <td width="150">  
                                                        <?php echo $product->name ?>  
                                                   </td>  
                                                   <td>  
                                                        <?php echo $product->price ?>  
                                                   </td>  
                                                   <td>  
                                                        <img src="<?php echo base_url('upload/product/'.$product->image) ?>" width="64" />  
                                                   </td>  
                                                   <td class="small">  
                                                        <?php echo substr($product->description, 0, 120) ?>...</td>  
                                                   <td width="250">  
                                                        <a href="<?php echo site_url('admin/products/edit/'.$product->product_id) ?>"  
                                                         class="btn btn-small"><i class="fas fa-edit"></i> Edit</a>  
                                                        <a onclick="deleteConfirm('<?php echo site_url('admin/products/delete/'.$product->product_id) ?>')"  
                                                         href="#!" class="btn btn-small text-danger"><i class="fas fa-trash"></i> Hapus</a>  
                                                   </td>  
                                              </tr>  
                                              <?php endforeach; ?>  
                                         </tbody>  
                                    </table>  
                               </div>  
                          </div>  
                     </div>  
                </div>  
                <!-- /.container-fluid -->  
                <!-- Sticky Footer -->  
                <?php $this->load->view("admin/_partials/footer.php") ?>  
           </div>  
           <!-- /.content-wrapper -->  
      </div>  
      <!-- /#wrapper -->  
      <?php $this->load->view("admin/_partials/scrolltop.php") ?>  
      <?php $this->load->view("admin/_partials/modal.php") ?>  
      <?php $this->load->view("admin/_partials/js.php") ?>  
      <script>  
      function deleteConfirm(url){  
           $('#btn-delete').attr('href', url);  
           $('#deleteModal').modal();  
      }  
      </script>  
 </body>  
 </html>  
-new_form.php
 <!DOCTYPE html>  
 <html lang="en">  
 <head>  
      <?php $this->load->view("admin/_partials/head.php") ?>  
 </head>  
 <body id="page-top">  
      <?php $this->load->view("admin/_partials/navbar.php") ?>  
      <div id="wrapper">  
           <?php $this->load->view("admin/_partials/sidebar.php") ?>  
           <div id="content-wrapper">  
                <div class="container-fluid">  
                     <?php $this->load->view("admin/_partials/breadcrumb.php") ?>  
                     <?php if ($this->session->flashdata('success')): ?>  
                     <div class="alert alert-success" role="alert">  
                          <?php echo $this->session->flashdata('success'); ?>  
                     </div>  
                     <?php endif; ?>  
                     <div class="card mb-3">  
                          <div class="card-header">  
                               <a href="<?php echo site_url('admin/products/') ?>"><i class="fas fa-arrow-left"></i> Back</a>  
                          </div>  
                          <div class="card-body">  
                               <form action="<?php base_url('admin/product/add') ?>" method="post" enctype="multipart/form-data" >  
                                    <div class="form-group">  
                                         <label for="name">Name*</label>  
                                         <input class="form-control <?php echo form_error('name') ? 'is-invalid':'' ?>"  
                                          type="text" name="name" placeholder="Product name" />  
                                         <div class="invalid-feedback">  
                                              <?php echo form_error('name') ?>  
                                         </div>  
                                    </div>  
                                    <div class="form-group">  
                                         <label for="price">Price*</label>  
                                         <input class="form-control <?php echo form_error('price') ? 'is-invalid':'' ?>"  
                                          type="number" name="price" min="0" placeholder="Product price" />  
                                         <div class="invalid-feedback">  
                                              <?php echo form_error('price') ?>  
                                         </div>  
                                    </div>  
                                    <div class="form-group">  
                                         <label for="name">Photo</label>  
                                         <input class="form-control-file <?php echo form_error('price') ? 'is-invalid':'' ?>"  
                                          type="file" name="image" />  
                                         <div class="invalid-feedback">  
                                              <?php echo form_error('image') ?>  
                                         </div>  
                                    </div>  
                                    <div class="form-group">  
                                         <label for="name">Description*</label>  
                                         <textarea class="form-control <?php echo form_error('description') ? 'is-invalid':'' ?>"  
                                          name="description" placeholder="Product description..."></textarea>  
                                         <div class="invalid-feedback">  
                                              <?php echo form_error('description') ?>  
                                         </div>  
                                    </div>  
                                    <input class="btn btn-success" type="submit" name="btn" value="Save" />  
                               </form>  
                          </div>  
                          <div class="card-footer small text-muted">  
                               * required fields  
                          </div>  
                     </div>  
                     <!-- /.container-fluid -->  
                     <!-- Sticky Footer -->  
                     <?php $this->load->view("admin/_partials/footer.php") ?>  
                </div>  
                <!-- /.content-wrapper -->  
           </div>  
           <!-- /#wrapper -->  
           <?php $this->load->view("admin/_partials/scrolltop.php") ?>  
           <?php $this->load->view("admin/_partials/js.php") ?>  
 </body>  
 </html>  
-edit_form.php
 <!DOCTYPE html>  
 <html lang="en">  
 <head>  
      <?php $this->load->view("admin/_partials/head.php") ?>  
 </head>  
 <body id="page-top">  
      <?php $this->load->view("admin/_partials/navbar.php") ?>  
      <div id="wrapper">  
           <?php $this->load->view("admin/_partials/sidebar.php") ?>  
           <div id="content-wrapper">  
                <div class="container-fluid">  
                     <?php $this->load->view("admin/_partials/breadcrumb.php") ?>  
                     <?php if ($this->session->flashdata('success')): ?>  
                     <div class="alert alert-success" role="alert">  
                          <?php echo $this->session->flashdata('success'); ?>  
                     </div>  
                     <?php endif; ?>  
                     <!-- Card -->  
                     <div class="card mb-3">  
                          <div class="card-header">  
                               <a href="<?php echo site_url('admin/products/') ?>"><i class="fas fa-arrow-left"></i>  
                                    Back</a>  
                          </div>  
                          <div class="card-body">  
                               <form action="<?php base_url(" admin/product/edit") ?>" method="post"  
                                    enctype="multipart/form-data" >  
                                    <input type="hidden" name="id" value="<?php echo $product->product_id?>" />  
                                    <div class="form-group">  
                                         <label for="name">Name*</label>  
                                         <input class="form-control <?php echo form_error('name') ? 'is-invalid':'' ?>"  
                                          type="text" name="name" placeholder="Product name" value="<?php echo $product->name ?>" />  
                                         <div class="invalid-feedback">  
                                              <?php echo form_error('name') ?>  
                                         </div>  
                                    </div>  
                                    <div class="form-group">  
                                         <label for="price">Price</label>  
                                         <input class="form-control <?php echo form_error('price') ? 'is-invalid':'' ?>"  
                                          type="number" name="price" min="0" placeholder="Product price" value="<?php echo $product->price ?>" />  
                                         <div class="invalid-feedback">  
                                              <?php echo form_error('price') ?>  
                                         </div>  
                                    </div>  
                                    <div class="form-group">  
                                         <label for="name">Photo</label>  
                                         <input class="form-control-file <?php echo form_error('image') ? 'is-invalid':'' ?>"  
                                          type="file" name="image" />  
                                         <input type="hidden" name="old_image" value="<?php echo $product->image ?>" />  
                                         <div class="invalid-feedback">  
                                              <?php echo form_error('image') ?>  
                                         </div>  
                                    </div>  
                                    <div class="form-group">  
                                         <label for="name">Description*</label>  
                                         <textarea class="form-control <?php echo form_error('description') ? 'is-invalid':'' ?>"  
                                          name="description" placeholder="Product description..."><?php echo $product->description ?></textarea>  
                                         <div class="invalid-feedback">  
                                              <?php echo form_error('description') ?>  
                                         </div>  
                                    </div>  
                                    <input class="btn btn-success" type="submit" name="btn" value="Save" />  
                               </form>  
                          </div>  
                          <div class="card-footer small text-muted">  
                               * required fields  
                          </div>  
                     </div>  
                     <!-- /.container-fluid -->  
                     <!-- Sticky Footer -->  
                     <?php $this->load->view("admin/_partials/footer.php") ?>  
                </div>  
                <!-- /.content-wrapper -->  
           </div>  
           <!-- /#wrapper -->  
           <?php $this->load->view("admin/_partials/scrolltop.php") ?>  
           <?php $this->load->view("admin/_partials/js.php") ?>  
 </body>  
 </html>  

Yang terakhir adalah kita menambahkan fitur hapus, caranya kita harus menambahkan fungsi deleteConfirm pada views list.php, codenya adalah
 <script>  
 function deleteConfirm(url){  
      $('#btn-delete').attr('href', url);  
      $('#deleteModal').modal();  
 }  
 </script>  

Setelah itu kita juga menambahan potongan kodingan di view modal.php, soource codenya adalah
 <!-- Logout Delete Confirmation-->  
 <div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">  
  <div class="modal-dialog" role="document">  
   <div class="modal-content">  
    <div class="modal-header">  
     <h5 class="modal-title" id="exampleModalLabel">Are you sure?</h5>  
     <button class="close" type="button" data-dismiss="modal" aria-label="Close">  
      <span aria-hidden="true">×</span>  
     </button>  
    </div>  
    <div class="modal-body">Data yang dihapus tidak akan bisa dikembalikan.</div>  
    <div class="modal-footer">  
     <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>  
     <a id="btn-delete" class="btn btn-danger" href="#">Delete</a>  
    </div>  
   </div>  
  </div>  
 </div>  

Untuk tutorial berikutnya adalah untuk menambahkan fitur upload, proses fitur uploadnya adalah:
  1. User mengirim file melalui form;
  2. File di-upload ke server dan disimpan dalam folder tmp dulu;
  3. Kita pindahkan file yang ada di direktori tmp ke dalam direktori upload/product/ yang sudah kita buat;
  4. Selesai

Caranya adalah, pertama kita tambahkan sepenggal kode pada Product_model.php, codingannya adalah:

 private function _uploadImage()  
 {  
   $config['upload_path']     = './upload/product/';  
   $config['allowed_types']    = 'gif|jpg|png';  
   $config['file_name']      = $this->product_id;  
   $config['overwrite']               = true;  
   $config['max_size']       = 1024; // 1MB  
   // $config['max_width']      = 1024;  
   // $config['max_height']      = 768;  
   $this->load->library('upload', $config);  
   if ($this->upload->do_upload('image')) {  
     return $this->upload->data("file_name");  
   }  
   return "default.jpg";  
 }  

Kemudian kita mengubah method save dan update menjadi seperti ini:
  public function save()    
   {    
   $post = $this->input->post();    
   $this->product_id = uniqid();    
   $this->name = $post["name"];    
   $this->price = $post["price"];    
   $this->image = $this->_uploadImage();    
   $this->description = $post["description"];    
   $this->db->insert($this->_table, $this);    
   }    

  public function update()    
   {    
   $post = $this->input->post();    
   $this->product_id = $post["id"];    
   $this->name = $post["name"];    
   $this->price = $post["price"];    
   if (!empty($_FILES["image"]["name"])) {    
    $this->image = $this->_uploadImage();    
   } else {    
    $this->image = $post["old_image"];    
   }    
   $this->description = $post["description"];    
   $this->db->update($this->_table, $this, array('product_id' => $post['id']));    
   }    

Kemudian yang terakhir adalah untuk fungsi delete image, kita menambhakna method deleteimage,codingannya adalah
 private function _deleteImage($id)   
  {   
   $product = $this->getById($id);   
   if ($product->image != "default.jpg") {   
     $filename = explode(".", $product->image)[0];   
       return array_map('unlink', glob(FCPATH."upload/product/$filename.*"));   
   }   
  }   

Berikut adalah hasil dari website:
-Halaman awal website

-List Produk yang sudah ada

-Proses menambahkan produk


-Edit detil Produk



-Hapus produk



Sekian Terima Kasih : )

Comments

Popular posts from this blog

MPPL 9 - Manajemen Biaya

Kelas : MPPL C Jeremy Vijay - 05111740000062 Raja Permata Boy - 05111740000070 Bobbi Aditya - 05111740000099 Samuel Marcellinus - 05111740000134 Bastian Farandy - 05111740000190 Link Spreadsheet : SpreadSheet

MPPL - Pengalaman proyek

Nama : Bobbi Aditya Kelas : MPPL-C NRP : 05111740000099 Berikut ini adalah proyek yang saya ketahui Nama Proyek :   Pembangunan Aplikasi MSO (Maintenance System Online) Berbasis Web Deskripsi : Aplikasi ini berguna untuk pemantauan alat-alat yang ada pada PT. Semen Indonesia - Gresik apabila terjadi kerusakan yang harus segera dilaporkan, atau terdapat jadwal pemeliharaan rutin. Lokasi : PT. Semen Indonesia (Persero) Tbk. - Gresik Jl. Veteran, Gresik Jawa Timur, 61122 Waktu Proyek: 02 - 31 Januari 2019 Tim yang terlibat: Almas Aqmarina 05111640000171 Daniel Kurniawan 0511164000081 Produk yang dihasilkan: Sebuah aplikasi yang berada di dalam server Semen Indonesia yang berguna untuk melakukan pemantuan terhadap alat-alat yang ada pada PT. Semen Indonesia. Untuk addressnya tidak bisa diakses dari luar jaringan PT. Semen Indonesia. Fitur: • Tabel Laporan Harian • Pengelolaan Laporan Harian (tambah, ubah, hapus) • Unduh dala