[trick] Setting Host Name Localhost di Linux Lite

Bismillah…

Kali ini sekedar catatan langkah melakukan hostname di localhost, kalo misalkan kita akses aplikasi via:

localhost/aplikasi atu 127.0.0.1/aplikasi

Kita mau ubah menjadi seperti ini:

aplikasi.local

Berikut ini langkahnya (pastikan menggunakan XAMPP untuk LINUX):

  1. Buka file /opt/lampp/etc/ http.conf dengan nano atau vim
  2. Cari file line “Virtual Host” di nomor 480, lalu uncomment… source: http://stackoverflow.com/a/10878285
  3. Buka file /opt/lampp/etc/extra/httpd-vhosts.conf dengan nano atau vim. lalu tambahkan virtual host. source: http://stackoverflow.com/q/10878284
  4. Buka file /etc/hosts dengan nano atau vim, tambahkan disamping “localhost” dengan nama ServerName yang diset di langkah 3 tadi.
  5. Restart xampp dengan perintah ” sudo /opt/lampp/lampp restart “
  6. Done.

Have a nice day!

Sumber:

  1. http://stackoverflow.com/questions/11259414/virtual-host-not-working-in-zend-framework
  2. https://framework.zend.com/manual/2.4/en/user-guide/skeleton-application.html
  3. http://stackoverflow.com/questions/10878284/virtual-hosts-xampp-linux-ubuntu-not-working

[share] Catatan Code PHP Sederhana Untuk Web Service

Bismillah…

sekedar catatan gw ajah …😛

	function __construct()
	{
		parent::__construct();
		$this->load->helper(array('url','form','string','text','security','html','debug','api'));
		
		// Load client library for test
		$this->load->spark('curl/1.2.0');
		$this->load->spark('restclient/2.0.0');
		$this->load->library(array('guzzle','http'));

		// Others
		$this->directory = 'api/';
		$this->name = 'bpjs';
	}

ini untuk library http dengan method GET:

		$sep = 'XXXXXXXXXXXXXXXXXXX';
		$hash = bpjs_hash_request(); //exit(dump($hash));

		$this->http->useCurl();
		$this->http->setMethod('GET');
		$this->http->addHeader('X-cons-id', $hash['con']);
		$this->http->addHeader('X-Timestamp', $hash['tim']);
		$this->http->addHeader('X-Signature', $hash['sig']);
		$this->http->execute('http://wwww.google.com/WsLokalRest/SEP/sep/'.$sep);
		echo "


<pre>"; echo ($this->http->error) ? $this->http->error : $this->http->result;
		$this->http->clear();

ini untuk library guzzle dengan method GET:

$url 	 = "http://www.google.com/WsLokalRest/SEP/";
		$hash 	 = bpjs_hash_request();
		
		$client  = new GuzzleHttp\Client([
            'base_uri' => $url,
            'timeout'  => 15.0,
            'headers' => [
                "User-Agent" => 'testing/1.0',
        	"Accept"     => 'application/json',
        	"X-cons-id" => $hash['con'],
        	"X-Timestamp" => $hash['tim'],
        	"X-Signature" => $hash['sig']
        	],
        ]);

		// $response = $client->get('sep/'.$sep, ['debug' => true]);
		$response = $client->request('GET', 'sep/'.$sep);
		// $response = $client->get('sep/'.$sep);

		// show data
		$contents = $response->getBody()->getContents();
		echo "


<pre>"; echo ($contents);

ini untul library curl dengan method GET:


	$hash = bpjs_hash_request();

		$this->curl->create('http://www.google.com/WsLokalRest/SEP/sep/'.$sep);

		$this->curl->http_method('GET');
		$this->curl->http_header('X-cons-id',$hash['con']);
		$this->curl->http_header('X-Timestamp',$hash['tim']);
		$this->curl->http_header('X-Signature',$hash['sig']);

		$result = $this->curl->get()->execute();
		echo "


<pre>"; echo $result;

ini untul library Guzzle dengan method POST:

// cara pertama
$res = $client->post('aplicaresws/rest/bed/create/'.$ppk_rsp, [
		    'json' => [
		        'kodekelas' => 'VVP',
		        'namaruang' => 'SUPER VIP',
		        'koderuang' => 'SUPER VIP',
		        'kapasitas' => 'KELAS UTAMA I',
		        'tersedia'  => 10
		    ]
		]);

// cara kedua 
		$res = $client->request('POST','aplicaresws/rest/bed/create/'.$ppk_rsp, [
			'json' => [
				'kodekelas' => 'VVP',
				'namaruang' => 'SUPER VIP',
				'koderuang' => 'SUPER VIP',
				'kapasitas' => 'KELAS UTAMA I',
				'tersedia'  => 10,
			]
		]);

// cara ketiga
		$res = $client->post('aplicaresws/rest/bed/create/'.$ppk_rsp, [
		    'headers' => ['Content-Type' => 'application/json'],
		    'body' => json_encode([
		        'kodekelas' => 'VVP',
		        'koderuang' => 'SUPER VIP',
		        'kapasitas' => 'KELAS UTAMA I',
		        'tersedia'  => 10
		    ]),
		    'future' => true
		]);

// source: http://stackoverflow.com/a/38060763

eh ternyata, guzzle 6 untuk PHP 5.5 sedangkan server gw pake 5.4 yaudah downgred lah pake guzzle 6…. cuman beda sikit ajah ini yang guzzel 5:

	
$client  = new GuzzleHttp\Client([
            'base_url' => $this->url_bed_bpjs,
            'timeout'  => 15.0,
            'defaults' => [
            'headers' => $this->header_bpjs
            ]
        ]);
// base_url itu guzzle 5, kalo base_uri itu guzzle 6
// headers di guzzle 5 dibuat array di defaults

Oya ini source guzzle yang akhirnya gw putuskan untuk dipake:

  1. Guzzle 5
  2. Guzzle 6
  3. Guzzle Terbaru
  4. Library Guzzle

Done, Have A Nice Day!

🙂

[share] Templating di Codeignter Dengan Mudah

Bismillah…

Kali ini gw mau share berdasarkan trick dari link ini:

https://samsonasik.wordpress.com/2009/04/30/template-layout-helper-pada-codeigniter/

Nah, trick templating ini lumayan simple dan ringkas dibanding kita harus mengakes view, misalkan:

$this->load->view(‘header’);

$this->load->view(‘isi’);

$this->load->view(‘footer’);

Intinya kita harus buat sebuah file templating utama/kedua/ketiga dimana dibody terdapat variabel tertentu yang menyimpan data, dengan memanfaatkan helper templating ini kita bisa pake berbagai macam theme…  ini gw pake di project tempat gw sendiri bisa diliat disini:

http://infobed.rsuppersahabatan.co.id/

Langkah pertama buat sebuah file helper, kita namakan, layout_helper.php, isinya kurang lebih kayak gini, ini gw pake 2 theme berbeda:

if ( ! function_exists('show'))
    {
        function  show($view, $data)
        {
           global $template;
           $ci = &get_instance();
           $data['view'] = $view;
           $ci->load->view($template, $data);
        }
    }

if ( ! function_exists('show_2'))
    {
        function  show_2($view, $data)
        {
           global $template_2;
           $ci = &get_instance();
           $data['view'] = $view;
           $ci->load->view($template_2, $data);
        }
    }

Langkah ke dua, load helper show itu di controller, kurang lebih kayak gini:

// load di controller pertama
	$view = "welcome/page";
	$kueri = $this->rest->get('FUNGSI_DARI_WEBSERVICE'); //exit(dump($data_bed));
	$bed['data'] = $kueri;
	// render
	show($view,$bed);

// load di controller kedua
	$view = "welcome/page_2";
	$kueri = $this->rest->get('FUNGSI_DARI_WEBSERVICE'); //exit(dump($kueri));
	$kuepi = $this->rest->get('FUNGSI_DARI_WEBSERVICE'); //exit(dump($kuepi));
	$bed['data'] = $kueri;
	$bed['kueh'] = $kuepi;
	// render
	show_2($view,$bed);

// tambahkan kode ini di layout master, di folder view
<?php $this->load->view($view);?>

Done. Simple kan? trick ini bisa kita pake, kalo ternyata library template kita terlalu kompleks dan pengen simple ajah coba pake helper ini, dijamin, lebih fokus ke bisnis proses….😛

Have a nice Day!

[trick] Mengambil Data Detail SEP Bridging BPJS Dengan Http Class

Bismillah…

ada banyak class class php yang bisa buat ngehandle cURL php secara native…. kenapa gw ngehindarin native, karena gw males ngulang fungsi yang sama untuk ouput yang sama…. ini bbrp class cURL yang gw dapet dari internet:

  1. cURL via https://github.com/philsturgeon/codeigniter-curl
  2. GuzzlePHP via http://docs.guzzlephp.org/en/latest/
  3. restClient via https://github.com/philsturgeon/codeigniter-restclient
  4. Http via http://phpfour.com/php-http-class/ or https://github.com/phpfour/http

Yap, kalo di aplikasi yang gw kembangin, yang udah berhasil ditest untuk dilempar ke service bpjs baru secara native dan Http. karena judul kali ini dengan Http Class nah, ini bbrp tambahan script http yang memang belum diupdate, karena bpjs menerima header dalam mengecek data yang dipinta, sedangkan http class belum ada silahkan tambahkan (informasi ini didapat dari kolom komentar):

//http://phpfour.com/php-http-class/#comment-591408832
/**
* Add a header to the request
* 
* @param string Name of header
* @param string Value of header
* @return void
*/
function addHeader($name, $value){
if(!empty($name) && !empty($value)){
$this->headers[] = $name . ": " . $value;
}
}

//In method execute() add
curl_setopt($ch, CURLOPT_HTTPHEADER,	$this->headers);	// Set custom headers

Kalo udah ditambahkan ini yang gw lakuin memanggil fungsi fungsi dari class http:

// HASH YANG DITENTUKAN OLEH BPJS
$hash = bpjs_hash_request(); //exit(dump($hash));
$this->http->useCurl();
$this->http->setMethod('GET');
$this->http->addHeader('X-cons-id', $hash['con']);
$this->http->addHeader('X-Timestamp', $hash['tim']);
$this->http->addHeader('X-Signature', $hash['sig']);
$this->http->execute('IP_BPJS/SEP_PASIEN');
echo "<pre>"; echo ($this->http->error) ? $this->http->error : $this->http->result;
$this->http->clear();

Dan nanti responsenya 200, kelar deh. dengan bbrp line saja kita sudah bisa mengambil data dari BPJS tanpa dengan pengulangan fungsi curl php sendiri.

Have a nice day!

[trick] Freeze Header Table Dengan plugin Javascript

Bismillah…

Langsung aja gw mau kasih trick, trick yang umum udah buanyak di google, gw lupa source nyah, ini sih sekedar pengingat gw ajah… ini script js nyah:

(function($) {

$.fn.fixedHeader = function (options) {
 var config = {
   topOffset: 90,
   bgColor: 'white'
 };
 if (options){ $.extend(config, options); }

 return this.each( function() {
  var o = $(this);

  var $win = $(window)
    , $head = $('thead.header', o)
    , isFixed = 0;
  var headTop = $head.length && $head.offset().top - config.topOffset;

  function processScroll() {
    if (!o.is(':visible')) return;
    if ($('thead.header-copy').size()) {
      $('thead.header-copy').width($head.width());
      var i, scrollTop = $win.scrollTop();
    }
    var t = $head.length && $head.offset().top - config.topOffset;
    if (!isFixed && headTop != t) { headTop = t; }
    if (scrollTop >= headTop && !isFixed) {
      isFixed = 1;
    } else if (scrollTop <= headTop && isFixed) { isFixed = 0; } isFixed ? $('thead.header-copy', o).show().offset({ left: $head.offset().left }) : $('thead.header-copy', o).hide(); } $win.on('scroll', processScroll); // hack sad times - holdover until rewrite for 2.1 $head.on('click', function () { if (!isFixed) setTimeout(function () { $win.scrollTop($win.scrollTop() - 47) }, 10); }) $head.clone(true).removeClass('header').addClass('header-copy header-fixed').css({'position': 'fixed', 'top': config['topOffset']}).appendTo(o); o.find('thead.header-copy').width($head.width()); o.find('thead.header > tr > th').each(function (i, h) {
    var w = $(h).width();
    o.find('thead.header-copy> tr > th:eq('+i+')').width(w)
  });
  $head.css({ margin:'0 auto',
              width: o.width(),
             'background-color':config.bgColor });
  processScroll();
 });
};

})(jQuery);

Kalo males, liat aja disini: link

Terus cara pakenya gimana? tenang ini script js nyah:

$(document).ready(function(){
    $('.table-fixed-header').fixedHeader();
});

Nah sintak htmlnya jangan lupa, misalkan:

<table class="table-fixed-header">
<thead class="header">

</thead>
</table>

ini buat css nyah:

  thead {
    background-color: #eaeaea;
}

Done! simple lah… silahkan manfaatkan!

Have a nice day…

[share] Cara Membuat Icon Tambahan Untuk Bootstrap

Bismillah…

Kali ini gw sedikit mau share kayak trick sih.. yang gw dapet dari link ini:

http://favbulous.com/post/1006/create-custom-icons-for-twitter-bootstrap-easily

Dari web tersebut kita akan disuruh membuka beberapa web sebagai tools/ alat pembuat icon diantaranya:

  1. http://www.famfamfam.com/lab/icons/silk/      <- ini icon sets
  2. http://spritegen.website-performance.org/    <– ini untuk generator css nyah

Langkah I, download icon set, bisa dari link diatas atau icon lainnya.. kurang lebih isi icon kayak gambar dibawah ini:

icon-1

Langkah II, upload semua icon ke link ke-2 kita ubah icon itu ke sprite (file image utuh) … nanti akan di generate sendiri oleh web itu menjadi code code css…  akan tercipta 2 file , png dan css nyah… kurang lebih hasilnya kayak gini:

sprite

Langkah III, kalo dari tutorial diatas kita disuruh perhatiin bbrpa point diantaranya:

  1. Gambar yang dibuat (generate) horizontal
  2. Horizontal Offset 5px
  3. Vertical Offset 5px
  4. Css Prefix rsp (terserah)

Kalo udah maka scriptnya akan keluar kayak gini:

.lang {
    background-image: url('image/url');
    background-repeat: no-repeat;
    display: block;
}
.lang-id { width: 16px; height: 11px; background-position: -5px -5px; }
.lang-us { width: 16px; height: 11px; background-position: -31px -5px; }

Langkah IV, kita mau integrasiin ke bootstrap,,, berikut codenyah (diambil dari script bootstrap):

/* icons */
[class^="rsp-"],
[class*=" rsp-"] {
  display: inline-block;
  width: 17px;
  height: 16px;
  *margin-right: .3em;
  line-height: 14px;
  vertical-align: text-top;
  background-image: url("icons/bahasa.png");
  background-position: 14px 14px;
  background-repeat: no-repeat;
}
[class^="rsp-"]:last-child,
[class*=" rsp-"]:last-child {
  *margin-left: 0;
}

.lang-id { width: 16px; height: 11px; background-position: -5px -5px; }
.lang-us { width: 16px; height: 11px; background-position: -31px -5px; }

DONE!

Gampang kok… kalo mu demo langsung aja ke sumber nyah … ini demo dari sumbernyah:

http://favbulous.com/demo/twitter-bootstrap-custom-icons/