Ilmu Coding Ilmucoding.com - Merupakan situs yang membantu Anda belajar coding lebih mudah, nyaman, interaktif dan profesional. Belajar sekarang di ilmu coding. GRATIS

Membuat Aplikasi Sistem Informasi Penjualan dengan Codeigniter 4 Part #4 – Modul Product

12 min read

Sistem Informasi Penjualan dengan Codeigniter 4

Ini merupakan part ke 4 dari tutorial cara membuat sistem informasi penjualan dengan codeigniter 4 .

Pada part ini Anda akan belajar manajement CRUD product, form helper sampai form upload.

Sebelumnya Ilmu Coding sudah membahas menajement CRUD category, session dan validation di part ke 3. Jika Anda belum membacanya, alangkah baiknya untuk membaca part ke 3 terlebih dahulu.

Jika sudah, di halaman ini Anda akan belajar:

  1. Membuat CRUD manajement product
  2. Helper form
  3. Upload data

Sebelum memulainya jangan lupa segelas kopi dan cemilan untuk menemanimu ngoding.

Let’s go!

Sekilas Tentang Helper Form

Di part ke 2 saya hanya menggunakan form HTML biasa. Namun pada part ini saya membutuhkan form helper pada saat create dan edit product. Alasannya karena saya sudah cukup nyaman dengan form helper. #eaaaa

Bukan hanya itu sih, di form helper menurut saya lebih banyak manfaatnya.

Salah satunya pada saat dropdown / select.

Katakanlah di manajement product ini akan melakukan join ke table categories.

Mau nggak mau meski menampilkan list category saat proses create dan edit.

Kalau pakai tag select biasa, ribet harus bikin foreach lagi.

Sedangkan dengan form helper, saya bisa menghindari foreach untuk menampilkan list category.

Proses selected pada saat edit juga jauh lebih mudah.

Analoginya gini, kalau ada 100 option dan pake HTML biasa, mau nggak mau melakukan inline if sebagai 100 kali, seperti pada part 2.

Kalau pakai form helper, saya nggak perlu pakai inline if lagi.

Cukup set valuenya.

Sim salabim.

Ke selected deh.

Silahkan baca tutorial lengkapnya di sini.

Sekilas Tentang Upload Data

Menatap masa lalu memang menyakitkan, tapi itu harus kita lakukan.

Sebab pada Codeigniter 3, upload data ditangani oleh library. Sedangkan di versi ke 4, sudah tidak perlu menggunakan library lagi.

Ini memudahkan kita dengan settingan yang tidak ribet lagi seperti di versi sebelumnya.

Yang ditawarkan di versi terbaru cukup beragam, mulai dari getName(), getTempName(), getRandomName() dan lain-lain.

Fungsi-fungsi di atas berguna untuk mengatur nama file saat melakukan upload.

Fitur lainnya adalah script untuk melakukan upload menggunakan move(‘path’, ‘file name’) di versi terbaru ini.

Untuk folder path yang akan digunakan yaitu public/uploads. Anda boleh mengcustomisasi.

Anda juga bisa menyimpan hasil upload di writelable. Namun di tutorial ini saya lebih memilih menyimpan di public/uploads.

Silahkan baca tutorial lengkapnya di sini.

Tambahkan Grup Product Validation

Buka file app/Config/Validation.php, kemudian tambahkan kode di bawah ini:

public $product = [
	'category_id'           => 'required',
	'product_name'          => 'required',
	'product_price'         => 'required',
	'product_sku'           => 'required',
	'product_status'        => 'required',
	'product_image'         => 'uploaded[product_image]|mime_in[product_image,image/jpg,image/jpeg,image/gif,image/png]|max_size[product_image,1000]',
	'product_description' 	=> 'required'
];

public $product_errors = [
	'category_id' 	=> [
		'required' 	=> 'Nama category wajib diisi.',
	],
	'product_name'	=> [
		'required' 	=> 'Nama product wajib diisi.'
	],
	'product_price' => [
		'required' 	=> 'Harga product wajib diisi.'
	],
	'product_sku'  	=> [
		'required' 	=> 'Kode product wajib diisi.'
	],
	'product_status'=> [
		'required' 	=> 'Status product wajib diisi.'
	],
	'product_image'=> [
		'mime_in' 	=> 'Gambar product hanya boleh diisi dengan jpg, jpeg, png atau gif.',
		'max_size'	=> 'Gambar product maksimal 1mb',
		'uploaded'	=> 'Gambar product wajib diisi'
	],
	'product_description'   => [
		'required' 			=> 'Description product wajib diisi.'
	]
];

Manajement CRUD Product

Silahkan ikuti step by step bagaimana membangun manajemen CRUD product yang digabungkan dengan upload dan paginate.

Step #1 – Buat Product Model

Silahkan buat file bernama Product_model.php dan simpan di direktori app/Config/Models.

Kemudian ketik kode di bawah ini:

<?php namespace App\Models;
use CodeIgniter\Model;
 
class Product_model extends Model
{
    protected $table = 'products';
     
    public function getProduct($id = false)
    {
        if($id === false){
            return $this->table('products')
                        ->join('categories', 'categories.category_id = products.category_id')
                        ->get()
                        ->getResultArray();
        } else {
            return $this->table('products')
                        ->join('categories', 'categories.category_id = products.category_id')
                        ->where('products.product_id', $id)
                        ->get()
                        ->getRowArray();
        }   
    }
}
?>

Penjelasan:

Kode di atas mirip sekali dengan Category_model.php yang kita buat di part sebelumnya.

Perbedaaanya ada pada baris 11-14 dan 16-20.

Pada baris 11-14 saya menggunakan join dan get yang masih dengan Codeigniter 3. Yang berbeda adalah pada function getResultArray().

Function getRowArray() ini mirip dengan function result_array() di versi ke 3. Tujuannya jelas, kalau hanya menggunakan getResult() pemanggilannya seperti:

$data->key

Sedangkan menggunakan getResultArray() outputnya berupa array dan pemanggilannnya seperti:

$data['key']

Kemudian pada baris 16-20 saya menambahkan function where dan getRowArray().

Mirip dengan row_array() di Codeigniter 3.

Biasanya row ini digunakan untuk menampilkan 1 data, seperti untuk menampilkan detail dan edit data. Kenyataannya akan kita gunakan untuk itu.

Hanya bentuknya saja mau diubah ke object atau array.

Step #2 – Buat Controller Product

Silahkan buat file bernama Product.php dan simpan di direktori app/Controllers.

Kemudian ketik kode berikut:

<?php namespace App\Controllers;
 
use CodeIgniter\Controller;
use App\Models\Product_model;
use App\Models\Category_model;
 
class Product extends Controller
{
    protected $helpers = [];

    public function __construct()
    {
        helper(['form']);
        $this->category_model = new Category_model();
        $this->product_model = new Product_model();
    }

    public function index()
    {
        $data['products'] = $this->product_model->getProduct();
        echo view('product/index', $data);
    }
}
?>

Penjelasan:

Pada Controller Product ini saya menggunakan constructor agar saya tidak perlu memanggil new Model lagi di function-function lainnya.

Selain itu saya memanggil form helper, Product_model dan Category_model di constructor. Ketiganya amat dibutuhkan untuk function-function lainnya.

Step #3 – Buat Halaman View Index Product

Pertama-tama silahkan buat folder baru bernama product di dalam direktori app/Views.

Kemudian buat file baru bernama index.php di dalam folder product.

Ketik kode berikut:

<?php echo view('_partials/header'); ?>
<?php echo view('_partials/sidebar'); ?>

<div class="content-wrapper">
    <div class="content-header">
        <div class="container-fluid">
            <div class="row mb-2">
                <div class="col-sm-6">
                    <h1 class="m-0 text-dark">Products</h1>
                </div>
                <div class="col-sm-6">
                    <ol class="breadcrumb float-sm-right">
                        <li class="breadcrumb-item"><a href="#">Home</a></li>
                        <li class="breadcrumb-item active">Products</li>
                    </ol>
                </div>
            </div>
        </div>
    </div>

    <div class="content">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="card">
                        <div class="card-header">
                            List Product
                            <a href="<?php echo base_url('product/create'); ?>" class="btn btn-primary float-right">Tambah</a>
                        </div>
                        <div class="card-body">
                        
                            <?php
                            if(!empty(session()->getFlashdata('success'))){ ?>
                            <div class="alert alert-success">
                                <?php echo session()->getFlashdata('success');?>
                            </div>     
                            <?php } ?>

                            <?php if(!empty(session()->getFlashdata('info'))){ ?>
                            <div class="alert alert-info">
                                <?php echo session()->getFlashdata('info');?>
                            </div>
                            <?php } ?>

                            <?php if(!empty(session()->getFlashdata('warning'))){ ?>
                            <div class="alert alert-warning">
                                <?php echo session()->getFlashdata('warning');?>
                            </div>
                            <?php } ?>

                            <div class="table-responsive">
                                <table class="table table-bordered table-hovered">
                                    <thead>
                                        <tr>
                                            <th width="10px" class="text-center">No</th>
                                            <th>Thumbnail</th>
                                            <th>SKU</th>
                                            <th>Name</th>
                                            <th>Category</th>
                                            <th>Price</th>
                                            <th>Status</th>
                                            <th class="text-center">Action</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <?php $nomor = 0; foreach($products as $key => $row){ ?>
                                        <tr>
                                            <td class="text-center"><?php echo ++$nomor; ?></td>
                                            <td><img src="<?php echo base_url('uploads/'.$row['product_image']) ?>" class="rounded-circle" width="50" height="50"></td>
                                            <td><?php echo $row['product_sku']; ?></td>
                                            <td><?php echo $row['product_name']; ?></td>
                                            <td><?php echo $row['category_name']; ?></td>
                                            <td><?php echo "Rp. ".number_format($row['product_price']); ?></td>
                                            <td><?php echo $row['product_status']; ?></td>
                                            <td class="text-center">
                                                <div class="btn-group">
                                                    <a href="<?php echo base_url('product/show/'.$row['product_id']); ?>" class="btn btn-sm btn-info">
                                                        <i class="fa fa-eye"></i>
                                                    </a>
                                                    <a href="<?php echo base_url('product/edit/'.$row['product_id']); ?>" class="btn btn-sm btn-success">
                                                        <i class="fa fa-edit"></i>
                                                    </a>
                                                    <a href="<?php echo base_url('product/delete/'.$row['product_id']); ?>" class="btn btn-sm btn-danger" onclick="return confirm('Apakah Anda yakin ingin menghapus kategori ini?');">
                                                        <i class="fa fa-trash-alt"></i>
                                                    </a>
                                                </div>
                                            </td>
                                        </tr>
                                        <?php } ?>
                                    </tbody>
                                </table>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </div>
    </div>
</div>
<?php echo view('_partials/footer'); ?>

Tidak ada hal baru saat ini.

Masih mirip dengan index category.

Jadi, tidak saya jelaskan lebih rinci di bagian ini.

Step #4 – Testing Index Product

Ketik command berikut jika Anda belum melakukannya:

php spark serve

Ketik URL berikut ini:

 http://localhost:8080/product 

Jika berjalan dengan lancar, halaman yang akan tampil seperti ini:

Sistem Informasi Penjualan dengan Codeigniter 4 Part 4 - 1

Step #5 – Tambahkan Function Insert di Product Model

Tambahkan kode di bawah ini tepat di bawah function getProduct() pada direktori app/Models/Product_model.php:

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

Scriptnya masih mirip dengan insert category.

Step #6 – Tambahkan Function Create dan Store di Controller Product

Tambahkan kode di bawah ini tepat di bawah function index() pada direktori app/Controllers/Product.php:

public function create()
{
    $categories = $this->category_model->where('category_status', 'Active')->findAll();
    $data['categories'] = ['' => 'Pilih Category'] + array_column($categories, 'category_name', 'category_id');
    return view('product/create', $data);
}

public function store()
{
    $validation =  \Config\Services::validation();

    // get file upload
    $image = $this->request->getFile('product_image');
    // random name file
    $name = $image->getRandomName();

    $data = array(
        'category_id'           => $this->request->getPost('category_id'),
        'product_name'          => $this->request->getPost('product_name'),
        'product_price'         => $this->request->getPost('product_price'),
        'product_sku'           => $this->request->getPost('product_sku'),
        'product_status'        => $this->request->getPost('product_status'),
        'product_image'         => $name,
        'product_description'   => $this->request->getPost('product_description'),
    );

    if($validation->run($data, 'product') == FALSE){
        session()->setFlashdata('inputs', $this->request->getPost());
        session()->setFlashdata('errors', $validation->getErrors());
        return redirect()->to(base_url('product/create'));
    } else {
        // upload file 
        $image->move(ROOTPATH . 'public/uploads', $name);
        // insert
        $simpan = $this->product_model->insertProduct($data);
        if($simpan)
        {
            session()->setFlashdata('success', 'Created Product successfully');
            return redirect()->to(base_url('product')); 
        }
    }
}

Penjelasan:

Pada baris ke 3 dan 4 saya berupaya untuk menampilkan list category dengan bantuan array_column.

Function array_column ini merupakan bawaan PHP, bukan Codeigniter.

Salah satu tujuan saya menggunakan array_column ini untuk mengelompokan data category hanya nama dan Id nya saja.

Data tersebut nantinya akan digunakan pada form_dropdown di halaman view create.php.

Anda akan merasakan magicnya.

Untuk function store() masih mirip dengan function store category baik dari segi pemanggilan dan validation.

Hanya saja penjelasan upload langsung pada comment baris kode di atas, tidak di sini.

Step #7 – Buat Halaman View Create Product

Pertama, silahkan buat folder baru bernama uploads di dalam folder public.

Kedua, silahkan buat file bernama create.php dan simpan di direktori app/Views/product.

Ketiga, ketik kode berikut:

<?php echo view('_partials/header'); ?>
<?php echo view('_partials/sidebar'); ?>

<div class="content-wrapper">
  <div class="content-header">
    <div class="container-fluid">
      <div class="row mb-2">
        <div class="col-sm-6">
          <h1 class="m-0 text-dark">Create Product</h1>
        </div>
        <div class="col-sm-6">
          <ol class="breadcrumb float-sm-right">
            <li class="breadcrumb-item"><a href="#">Home</a></li>
            <li class="breadcrumb-item active">Create Product</li>
          </ol>
        </div>
      </div>
    </div>
  </div>
  <div class="content">
    <div class="container-fluid">
      <div class="row">
        <div class="col-md-12">
          <?php 
            $inputs = session()->getFlashdata('inputs');
            $errors = session()->getFlashdata('errors');
            if(!empty($errors)){ ?>
            <div class="alert alert-danger" role="alert">
              Whoops! Ada kesalahan saat input data, yaitu:
              <ul>
              <?php foreach ($errors as $error) : ?>
                  <li><?= esc($error) ?></li>
              <?php endforeach ?>
              </ul>
            </div>
          <?php } ?>
          <?php echo form_open_multipart('product/store'); ?>
          <div class="card">
            <div class="card-body">
              <div class="row">
                <div class="col-md-6">
                  <div class="form-group"> 
                    <?php 
                      echo form_label('Category', 'Category');
                      echo form_dropdown('category_id', $categories, $inputs['category_id'], ['class' => 'form-control']); 
                    ?>
                  </div>
                  <div class="form-group">
                    <?php 
                      echo form_label('Name');
                      $product_name = [
                        'type'  => 'text',
                        'name'  => 'product_name',
                        'id'    => 'product_name',
                        'value' => $inputs['product_name'],
                        'class' => 'form-control',
                        'placeholder' => 'Product Name'
                      ];
                      echo form_input($product_name); 
                    ?>
                  </div>
                  <div class="form-group">
                    <?php 
                      echo form_label('Price');
                      $product_price = [
                        'type'  => 'number',
                        'name'  => 'product_price',
                        'id'    => 'product_price',
                        'value' => $inputs['product_price'],
                        'class' => 'form-control',
                        'placeholder' => '0'
                      ];
                      echo form_input($product_price); 
                    ?>
                  </div>
                </div>
                <div class="col-md-6">
                  <div class="form-group">
                    <?php 
                      echo form_label('SKU');
                      $product_sku = [
                        'type'  => 'text',
                        'name'  => 'product_sku',
                        'id'    => 'product_sku',
                        'value' => $inputs['product_sku'],
                        'class' => 'form-control',
                        'placeholder' => 'Product SKU'
                      ];
                      echo form_input($product_sku); 
                    ?>
                  </div>
                  <div class="form-group">
                    <?php 
                      echo form_label('Status', 'Status');
                      echo form_dropdown('product_status', ['' => 'Pilih', 'Active' => 'Active', 'Inactive' => 'Inactive'], $inputs['product_status'], ['class' => 'form-control']); 
                    ?>
                  </div>
                  <div class="form-group">
                    <?php 
                      echo form_label('Image');
                      echo form_upload('product_image', '', ['class' => 'form-control']); 
                    ?>
                  </div>
                </div>
              </div>
              <div class="row">
                <div class="col-md-12">
                  <div class="form-group">
                    <?php 
                      echo form_label('Description'); 
                      $product_desc = [
                        'type'  => 'text',
                        'name'  => 'product_description',
                        'id'    => 'product_description',
                        'value' => $inputs['product_description'],
                        'class' => 'form-control',
                        'placeholder' => 'Product Description'
                      ];
                      echo form_textarea($product_desc);
                    ?>
                  </div>
                </div>
              </div>
            </div>
            <div class="card-footer">
                <a href="<?php echo base_url('product'); ?>" class="btn btn-outline-info">Back</a>
                <button type="submit" class="btn btn-primary float-right">Simpan</button>
            </div>
          </div>
          <?php echo form_close(); ?>
        </div>
      </div>
    </div>
  </div>
</div>
<?php echo view('_partials/footer'); ?>

Step #8 – Testing Create dan Store Product

Ketik URL berikut:

localhost:8080/product/create

Jika berjalan dengan baik, maka akan tampil gambar seperti ini:

Sistem Informasi Penjualan dengan Codeigniter 4 Part 4 - 2
Tampilan saat validation create error
Sistem Informasi Penjualan dengan Codeigniter 4 Part 4 - 11
Tampilan saat berhasil create product

Step #9 – Tambahkan Function Update di Product Model

Tambahkan kode di bawah ini tepat di bawah function insertProduct() pada direktori app/Models/Product_model.php:

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

Step #10 – Tambahkan Function Show, Edit dan Update di Controller Product

Tambahkan kode di bawah ini tepat di bawah function store() pada direktori app/Controllers/Product.php:

public function show($id)
{  
    $data['product'] = $this->product_model->getProduct($id);
    echo view('product/show', $data);
}

public function edit($id)
{  
    $categories = $this->category_model->where('category_status', 'Active')->findAll();
    $data['categories'] = ['' => 'Pilih Category'] + array_column($categories, 'category_name', 'category_id');

    $data['product'] = $this->product_model->getProduct($id);
    echo view('product/edit', $data);
}

public function update()
{
    $id = $this->request->getPost('product_id');

    $validation =  \Config\Services::validation();

    // get file
    $image = $this->request->getFile('product_image');
    // random name file
    $name = $image->getRandomName();

    $data = array(
        'category_id'           => $this->request->getPost('category_id'),
        'product_name'          => $this->request->getPost('product_name'),
        'product_price'         => $this->request->getPost('product_price'),
        'product_sku'           => $this->request->getPost('product_sku'),
        'product_status'        => $this->request->getPost('product_status'),
        'product_image'         => $name,
        'product_description'   => $this->request->getPost('product_description'),
    );
    
    if($validation->run($data, 'product') == FALSE){
        session()->setFlashdata('inputs', $this->request->getPost());
        session()->setFlashdata('errors', $validation->getErrors());
        return redirect()->to(base_url('product/edit/'.$id));
    } else {
        // upload
        $image->move(ROOTPATH . 'public/uploads', $name);
        // update
        $ubah = $this->product_model->updateProduct($data, $id);
        if($ubah)
        {
            session()->setFlashdata('info', 'Updated Product successfully');
            return redirect()->to(base_url('product')); 
        }
    }
}

Step #11 – Buat Halaman View Show dan Edit Product

Tambahkan 2 kode di bawah ini pada folder app/Views/product.

Kode app/Views/product/show.php:

<?php echo view('_partials/header'); ?>
<?php echo view('_partials/sidebar'); ?>

<div class="content-wrapper">
  <div class="content-header">
    <div class="container-fluid">
      <div class="row mb-2">
        <div class="col-sm-6">
          <h1 class="m-0 text-dark">Show Product</h1>
        </div>
        <div class="col-sm-6">
          <ol class="breadcrumb float-sm-right">
            <li class="breadcrumb-item"><a href="#">Home</a></li>
            <li class="breadcrumb-item active">Show Product</li>
          </ol>
        </div>
      </div>
    </div>
  </div>

  <div class="content">
    <div class="container-fluid">
      <div class="row">
        <div class="col-md-12">
          <div class="card">
            <div class="card-body">
              <div class="row">
                <div class="col-md-4">
                  <img src="<?php echo base_url('uploads/'.$product['product_image']) ?>" class="img-fluid">
                </div>
                <div class="col-md-8">
                  <dl class="dl-horizontal">
                    <dt>SKU / Kode Product</dt>
                    <dd><?php echo $product['product_sku']; ?></dd>
                    <dt>Kategori Product</dt>
                    <dd><?php echo $product['category_name']; ?></dd>
                    <dt>Nama Product</dt>
                    <dd><?php echo $product['product_name']; ?></dd>
                    <dt>Harga Product</dt>
                    <dd><?php echo 'Rp. '.number_format($product['product_price']); ?></dd>		
                    <dt>Status Product</dt>
                    <dd><?php echo $product['product_status']; ?></dd>	   
                    <dt>Description Product</dt>
                    <dd><?php echo $product['product_description']; ?></dd>             
                  </dl>
                </div>
              </div>
            </div>
            <div class="card-footer">
              <a href="<?php echo base_url('product'); ?>" class="btn btn-outline-info float-right">Back</a>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>
<?php echo view('_partials/footer'); ?>

Kode app/Views/product/edit.php:

<?php echo view('_partials/header'); ?>
<?php echo view('_partials/sidebar'); ?>

<div class="content-wrapper">
  <div class="content-header">
    <div class="container-fluid">
      <div class="row mb-2">
        <div class="col-sm-6">
          <h1 class="m-0 text-dark">Edit Product</h1>
        </div><!-- /.col -->
        <div class="col-sm-6">
          <ol class="breadcrumb float-sm-right">
            <li class="breadcrumb-item"><a href="#">Home</a></li>
            <li class="breadcrumb-item active">Edit Product</li>
          </ol>
        </div>
      </div>
    </div>
  </div>

  <div class="content">
    <div class="container-fluid">
      <div class="row">
        <div class="col-md-12">
          <?php 
            $inputs = session()->getFlashdata('inputs');
            $errors = session()->getFlashdata('errors');
            if(!empty($errors)){ ?>
            <div class="alert alert-danger" role="alert">
              Whoops! Ada kesalahan saat input data, yaitu:
              <ul>
              <?php foreach ($errors as $error) : ?>
                  <li><?= esc($error) ?></li>
              <?php endforeach ?>
              </ul>
            </div>
          <?php } ?>
          <div class="card">
            <?php echo form_open_multipart('product/update'); ?>
              <div class="card-header">Form Edit Produk</div>
              <div class="card-body">
                <?php echo form_hidden('product_id', $product['product_id']); ?>
                <div class="row">
                  <div class="col-md-4">
                    <div class="form-group">
                      <?php echo form_label('Image', 'Image'); ?>
                      <br>
                      <img src="<?php echo base_url('uploads/'.$product['product_image']) ?>" class="img-fluid">
                      <br>
                      <br>
                      <?php echo form_label('Ganti Image', 'Ganti Image'); ?>
                      <?php echo form_upload('product_image', $product['product_image']); ?>
                    </div>
                  </div>
                  <div class="col-md-8">
                    <div class="form-group"> 
                      <?php echo form_label('Category', 'Category'); ?>
                      <?php echo form_dropdown('category_id', $categories, $product['category_id'], ['class' => 'form-control']); ?>
                    </div>
                    <div class="form-group">
                      <?php echo form_label('Name', 'Name'); ?>
                      <?php echo form_input('product_name', $product['product_name'], ['class' => 'form-control', 'placeholder' => 'Product Name']); ?>
                    </div>
                    <div class="form-group">
                      <?php echo form_label('Price', 'Price'); ?>
                      <?php echo form_input('product_price', $product['product_price'], ['class' => 'form-control', 'placeholder' => 'Product Price', 'type' => 'number']); ?>
                    </div>
                    <div class="form-group">
                      <?php echo form_label('SKU', 'SKU'); ?>
                      <?php echo form_input('product_sku', $product['product_sku'], ['class' => 'form-control', 'placeholder' => 'Product SKU']); ?>
                    </div>
                  </div>
                </div>
                <div class="row">
                  <div class="col-md-12">
                    <div class="form-group">
                      <?php echo form_label('Status', 'Status'); ?>
                      <?php echo form_dropdown('product_status', ['' => 'Pilih', 'Active' => 'Active', 'Inactive' => 'Inactieve'], $product['product_status'], ['class' => 'form-control']); ?>
                    </div>
                    <div class="form-group">
                      <?php echo form_label('Description', 'Description'); ?>
                      <?php echo form_textarea('product_description', $product['product_description'], ['class' => 'form-control', 'placeholder' => 'Product Description']); ?>
                    </div>
                  </div>
                </div>
              </div>
              <div class="card-footer">
                  <a href="<?php echo base_url('product'); ?>" class="btn btn-outline-info">Back</a>
                  <button type="submit" class="btn btn-primary float-right">Update</button>
              </div>
            <?php echo form_close(); ?>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>
<?php echo view('_partials/footer'); ?>

Step #12 – Testing Show, Edit dan Update Product

Ketik URL Berikut:

localhost:8080/product/show/kode_productnya // untuk detail
localhost:8080/product/edit/kode_productnya // untuk edit

Jika berjalan dengan lancar, halaman yang akan tampil seperti ini:

Sistem Informasi Penjualan dengan Codeigniter 4 Part 4 - 3
Tampilan show
Sistem Informasi Penjualan dengan Codeigniter 4 Part 4 - 4
Tampilan validate edit error
Sistem Informasi Penjualan dengan Codeigniter 4 Part 4 - 12
Tampilan saat berhasil update

Step #13 – Tambahkan Function Delete di Product Model

Tambahkan kode di bawah ini tepat di bawah function updateProduct() pada direktori app/Models/Product_model.php:

public function deleteProduct($id)
{
    return $this->db->table($this->table)->delete(['product_id' => $id]);
} 

Step #14 – Tambahkan Function Delete di Controller Product

Tambahkan kode di bawah ini tepat di bawah function update() pada direktori app/Controllers/Product.php:

public function delete($id)
{
    $hapus = $this->product_model->deleteProduct($id);
    if($hapus)
    {
        session()->setFlashdata('warning', 'Deleted Product successfully');
        return redirect()->to(base_url('product')); 
    }
}

Step #15 – Testing Delete Product

Jika berjalan dengan lancar, halaman yang akan tampil seperti ini:

Sistem Informasi Penjualan dengan Codeigniter 4 Part 4 - 5
Tampilan berhasil delete

Full Source Code

Silahkan download source full code sistem informasi penjualan dengan codeigniter 4 part ke 4 ini melalui link di bawah ini:

Download Source Code

Pengantar Sistem Informasi Penjualan dengan Codeigniter 4

Demikianlah tutorial membuat sistem informasi penjualan dengan codeigniter 4 part ke 4 yang membahas sekilas tentang helper form, upload data, pagination dan manajemen product.

Pada part berikutnya Anda akan belajar bagaimana membuat fitur filtering pada index product.

Saya berharap, semoga Anda terus mengikuti tutorial part berikutnya di Ilmu Coding.

Insya Allah jika ada hal-hal baru akan saya sampaikan di part berikutnya.

Terima kasih telah membaca artikel ini. Jangan lupa share dan komentar ya.

Selamat belajar …

Ilmu Coding Ilmucoding.com - Merupakan situs yang membantu Anda belajar coding lebih mudah, nyaman, interaktif dan profesional. Belajar sekarang di ilmu coding. GRATIS

22 Replies to “Membuat Aplikasi Sistem Informasi Penjualan dengan Codeigniter 4 Part #4 – Modul…”

  1. terima kasih om.. atas sharing ilmunya. berguna banget buat saya yg baru belajar. jadi bisa belajar dari studi kasus sebuat project.
    mudah2an rezekinya tambah lancar om..

  2. Mas, bisa kita bikin default gambarnya jika gambar tidak diupload? mohon berikan penjelasannya.

  3. Cuma penasaran saja, baru mencoba menggunakan CI yang sebelumnya belajar di CI3 sebentar karena memang banyak guidenya tp karena ada yg terbaru (CI4) ya lgsg aja pakai yg terbaru, hehe.
    Sebelumnya saya banyak menggunakan Yii2.

    Sepertinya CI4 mulai mengikuti konsepnya Yii2 ya jika lihat dari updatenya dr CI3 ke CI4 (namespace). Saya cuma penasaran mengapa CI bisa begitu lite drpd Yii2. Apa dari vendor/third partynya ya yg sangat banyak (yii2)

    Sanagat terbantu dengan postingan mas, trimakasih ya

    1. Sama begini, model itu biasanya berisi list field, validation, label …
      update insert edit delete view semua di controler…

      Kalo di CI4 ini masih berbeda, tapi mungkin bisa di buat sama ya. Cuma si mas ini menggunakan konsep yg berbeda.

      Maklum saya masih awam

      1. Terima kasih Bang sudah berkunjung. Saya sangat terbantu dengan informasinya.

    2. Terima kasih Bang sudah berkunjung. Saya sangat terbantu dengan informasinya.

  4. Halo bang, saya mau nanya nih.
    Itu gimana ya caranya biar bisa update tapi tanpa mengubah gambar, soalnya ketika saya melakukan update, selalu minta gambar yg baru.
    Terima kasih

  5. Bang, punya saya errornya di code ini “echo form_dropdown(‘category_id’, $categories, $inputs[‘category_id’], [‘class’ => ‘form-control’]); ” di view create.php.
    ini code di controllernya : $data[‘categories’] = [” => ‘Pilih Category’] + array_column($categories, ‘category_name’, ‘category_id’);

    Kira-kira apa yang salah ya bang? katanya array_column itu punya php versi 5.5, sedangkan sy pakai versi Php 7.4.

  6. Bang, mau pake form helpder / select option nya tapi tanpa memilih active dan incative bagaimana ya

    1. Bisa silahkan ganti di file migrate jangan pakai enum. Pakai aja varchar. Nanti biar bisa diganti dengan selain Active dan Inactive.

  7. Terimakasih buat ilmunya gan..
    mau tanya, waktu update data produk supaya tidak perlu lagi upload gambar kira2 gimana ya gan tekniknya ?

  8. Buat yang ngalamin error di bagian form_dropdown kemungkinan besar penyebabny versi ci 4 /php yg di gunakan berbeda ( saat ini versi 4. 04/7x ) dan kemungkinan saat artikel terbit versi 4.03/7x yg lws ( walau ane rasa kecil kemungkinan ) , solusinya coba pke alternatif lain yaitu semua variable $input diganti dengan fungsi old(‘nilai’) misal $inputs[‘nama_kategori’] diganti jadi old(‘nama_kategori’) variabel input di view yg di deklarasikan di awal boleh di hapus.

    keduanya punya kegunaan yang sama $input dan old sama – sama nangkap parameter yg di input user saat ngisi datany
    btw jng lupa sertakan :

    return redirect()->back()->withInput(); di kontroler fungsi store baris yg di ganti adalah
    return redirect()->to(base_url(‘product/create’)); ( blok kondisi pertama )

    1. Ini udah saya test dan kebetulan saya nyoba pakai php versi 7.2 ke atas.

      Hasilnya error karena support di php 7.2 mentok.

      Php 7.3 ke atas kudu ditambahkan:

      $inputs = session()->getFlashdata(‘inputs’);
      $input_category_id = $inputs[‘category_id’] == null ? ” : $inputs[‘category_id’];

      Kemudian ubah $inputs[‘category_id’] jadi $input_category_id

      Saya udah coba dan work sih.

  9. lupa ada eror lagi :v di view index variabel nomor belum di deklarasikan jdi deklarasikan dulu dengan nilai 0

Leave a Reply

Your email address will not be published. Required fields are marked *

Jika terbantu dengan artikel ini, silahkan share, beri komentar dan "klik" 1 kali pada iklan ya.