# CodeIgniter Snippet

## Config.php

Membuat redirect kode secara Default agar bisa menampilkan berdasarkan projek aplikasi web anda yang dibuat. Semisal anda menaruh aplikasi projek pada htdocs/namafolder/namafolder anda tidak perlu merubah base\_url nya menjadi localhost/namafolder/namafolder

Dan jika URL hosting anda menggunakan https\:// anda juga dapat me redirect langsung dengan cara seperti pada kode berikut:

```php
$root=(isset($_SERVER['HTTPS']) ? "https://" : "http://").$_SERVER['HTTP_HOST'];
$root.= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);
$config['base_url']=$root;
```

## htaccess

```
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Header set X-XSS-Protection "1; mode=block" 
</IfModule>
```

## Template views

{% code title="Themes.php" %}

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

class Themes {
	protected $_ci;
	function __construct(){
		$this->_ci=&get_instance();
	}
	function display($set, $data=null){
		$data['_content']=$this->_ci->load->view($set,$data,true);
		$this->_ci->load->view('themes.php',$data);
	}
}

/* End of file Themes.php */
/* Location: ./application/libraries/Themes.php */

```

{% endcode %}

Anda bisa menggunakan Library diatas untuk memudahkan load views tanpa harus membuat header, content, footer yang diulang-ulang untuk meloadnya dan anda cukup deklarasi pada Controller seperti berikut :

{% code title="Home Controller" %}

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

class Home extends CI_Controller {
	
	public function __construct()
	{
		parent::__construct();
	}
	public function index()
	{
		$this->data['title']='Home';
		$this->themes->display('content/home',$this->data);
	}

}

```

{% endcode %}

{% code title="themes.php (views)" %}

```php
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
	<title><?php echo $title ?></title>
	<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
	<!-- Bootstrap 3.3.7 -->
	<link rel="stylesheet" href="<?php echo base_url('assets/css/bootstrap.min.css');?>">
	<link rel="stylesheet" href="<?php echo base_url('assets/css/font-awesome.min.css');?>">
	<script src="<?php echo base_url('assets/js/jquery.min.js');?>"></script>
    <script src="<?php echo base_url('assets/js/bootstrap.min.js');?>"></script>
</head>
<body>
<div class="wrapper">
  <header>
    <ul>
      <li> <?php echo anchor('home','Home');?></li>
      <li> <?php echo anchor('about','About');?></li>
    </ul>
  </header>
  <div class="content">
    //Display Content in here
    <?php echo $_content; ?>
  </div>
  <footer>
    <?php echo  (ENVIRONMENT === 'development') ?  'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : '' ?>
    <strong>Copyright &copy; <?php echo date('Y') ?> <a href="https://herusulistiono.net" target="_blank">Heru Sulistiono</a>.</strong> All rights reserved.
  </footer>
</div>
</body>
</html>
```

{% endcode %}

## Helper

Membuat Jumlah terbilang seperti Kwitansi

### Helper Terbilang

{% code title="rpkata\_helper.php" %}

```php
<?php defined('BASEPATH') OR exit('No direct script access allowed');
function penyebut($nilai) {
    $nilai = abs($nilai);
    $huruf = array("", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan", "sepuluh", "sebelas");
    $temp = "";
    if ($nilai < 12) {
        $temp = " ". $huruf[$nilai];
    } else if ($nilai <20) {
        $temp = penyebut($nilai - 10). " belas";
    } else if ($nilai < 100) {
        $temp = penyebut($nilai/10)." puluh". penyebut($nilai % 10);
    } else if ($nilai < 200) {
        $temp = " seratus" . penyebut($nilai - 100);
    } else if ($nilai < 1000) {
        $temp = penyebut($nilai/100) . " ratus" . penyebut($nilai % 100);
    } else if ($nilai < 2000) {
        $temp = " seribu" . penyebut($nilai - 1000);
    } else if ($nilai < 1000000) {
        $temp = penyebut($nilai/1000) . " ribu" . penyebut($nilai % 1000);
    } else if ($nilai < 1000000000) {
        $temp = penyebut($nilai/1000000) . " juta" . penyebut($nilai % 1000000);
    } else if ($nilai < 1000000000000) {
        $temp = penyebut($nilai/1000000000) . " milyar" . penyebut(fmod($nilai,1000000000));
    } else if ($nilai < 1000000000000000) {
        $temp = penyebut($nilai/1000000000000) . " trilyun" . penyebut(fmod($nilai,1000000000000));
    }     
    return $temp;
}
function terbilang($nilai) {
    if($nilai<0) {
        $hasil = "minus ". trim(penyebut($nilai));
    } else {
        $hasil = trim(penyebut($nilai));
    }           
    return $hasil;
}
/* End of file rpkata_helper.php */
/* Location: ./application/helpers/rpkata_helper.php */
```

{% endcode %}

{% code title="Views - Data" %}

```php
Menampilkan cukup dengan seperti
<?php echo strtoupper(terbilang($jumlah)); ?>
```

{% endcode %}

### Helper Active Menu Class Controller

{% code title="menu\_helper.php" %}

```php
<?php if(!defined('BASEPATH')) exit('No direct script access allowed');
if(!function_exists('active_menu')) {
  function activate_menu($controller) {
    // Getting CI class instance.
    $CI = get_instance();
    // Getting router class to active.
    $class = $CI->router->fetch_class();
    return ($class == $controller) ? 'active' : '';
  }
}
```

{% endcode %}

{% code title="Views Link" %}

```php
<ul>
  <li class="<?php echo active_menu('home');?>"> 
    <?php echo anchor('home','Home');?></li>
  <li class="<?php echo active_menu('about');?>"> 
    <?php echo anchor('about','About');?></li>
</ul>
```

{% endcode %}

## Form Validation Bootsrap

{% code title="Application => Views" %}

```markup
<section class="py-2">
	<div class="row">
		<div class="col-lg-12 mb-4">
			<div class="card">
            <div class="card-header bg-primary text-white">
            	<div class="row">
	         		<div class="col-lg">
	         			<h6 class="text-uppercase mb-0"><?php echo $title; ?></h6>
	         		</div>
	         		<div class="col-lg">
	         			<div class="float-right">
			  					<button type="button" data-toggle="modal" data-target="#provinsi_modal" class="btn btn-rounded btn-secondary btn-sm">ADD</button>
			  				</div>
	         		</div>
	         	</div>
            </div>
            <div class="card-body">
            	<div class="table-responsive">
				   	<table id="provinsi_data" class="table table-hover table-striped table-sm card-text">
					    	<thead>
								<tr>
									<th width="5%" class="text-center">NO</th>
									<th>PROVINSI NAME</th>
									<th width="5%" class="text-center">#</th>
								</tr>
							</thead>
							<tbody></tbody>
				   	</table>
					</div>
            </div>
         </div>
		</div>
	</div>	
</section>
<div class="modal fade" id="provinsi_modal" data-backdrop="static" tabindex="-1" role="dialog" aria-hidden="true">
	<div class="modal-dialog" role="document">
		<div class="modal-content">
			<?php echo form_open('#',array("id"=>"form","autocomplete"=>"off")); ?>
			<div class="modal-header bg-primary border-0">
				<h5 class="modal-title text-white">ADD NEW PROVINSI</h5>
				<button type="button" class="close" data-dismiss="modal" aria-label="Close" onclick="return location.reload()">
					<span aria-hidden="true">&times;</span>
				</button>
			</div>
			<div class="modal-body p-3">
				<div id="provinsi_name-group" class="form-group">
					<label>PROVINSI:</label>
					<input type="text" name="provinsi_name" id="provinsi_name" class="form-control form-control-sm" placeholder="PROVINSI"/>
				</div>
				<input type="hidden" name="prov_id"/>
			</div>
			<div class="modal-footer border-0">
				<button type="button" id="save" class="btn btn-primary btn-rounded" onclick="insert_provinsi()">SAVE</button>
				<button type="button" id="update" class="btn btn-warning btn-rounded" disabled="disabled" onclick="update_provinsi()">UPDATE</button>
				<button type="button" class="btn btn-danger btn-rounded" data-dismiss="modal">CANCEL</button>
			</div>
			<?php echo form_close(); ?>
		</div>
    </div>
</div>

<script>
function insert_provinsi() {
		data = $('#form').serialize();
		$('#save').text('please wait.....!!');
    $('#save').attr('disabled',true);
 		$('.form-group, .form-control').removeClass('is-invalid');
  	$('.invalid-feedback').remove();
 		$.ajax({
 			url: '<?php echo site_url('provinsi/insert_provinsi');?>',
 			type: 'POST',
 			dataType: 'JSON',
 			data: data,
 			encode:true,
 			success:function(data) {
 				console.log(data);
	      	if (!data.success) {
	      		$('#save').text('SAVE');
          		$('#save').attr('disabled',false);
	      		if (data.errors.provinsi_name) {
		            $('#provinsi_name-group, #provinsi_name').addClass('is-invalid');
		            $('#provinsi_name-group').append('<div class="invalid-feedback">'+data.errors.provinsi_name+'</div>');
		            $('#provinsi_name').focus();
		            return false;
		         }
	      	}else{
	      		var msg = data.message;
	            setTimeout(function () {
				      		window.location.reload()
				      },800);
	      	}
 			}
 		})
	}
</script>
```

{% endcode %}

{% code title="Application => Controller" %}

```php
public function insert_provinsi()
	{
		$errors;
		$info=array();
		if($this->input->post('provinsi_name')==='' || $this->input->post('provinsi_name'))
			$this->form_validation->set_rules('provinsi_name','PROVINSI','required|is_unique[provinsi.provinsi_name]',array('is_unique'=> '%s already exists !!.'));
			if ($this->form_validation->run('provinsi_name') === FALSE)
				$errors['provinsi_name']=validation_errors();

		if ($this->form_validation->run()===TRUE) {
			$data = array(
				'provinsi_name' => ucwords($this->input->post('provinsi_name')),
			);
			$this->provinsi_m->insert($data);
			$info['success']=TRUE;
	      $info['message']='Successfully';
		}else{
			$info['success']=FALSE;
			$info['errors']=$errors;
		}
		$this->output->set_content_type('application/json')->set_output(json_encode($info));
	}
```

{% endcode %}

## Upload Image

## Datatable Load Data


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://herusulistiono.gitbook.io/programming/web-programming/codeigniter-snippet-code.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
