tutorial membangun sistem core.docx

76
Tutorial Membangun Sistem Core Membuat framework PHP berbasis Model View Controller(MVC) ternyata tidak terlalu sulit.Pada tahap ini akan dijelaskan tata cara pembuatan Controller,View dan struktur lainnya seperti Loader, Register Object dan sebagainya. Sebelum kita mulai pembuatan framework-nya, alangkah lebih baik dijelaskan terlebih dahulu apa latar belakang framework MVC. Dilihat dari sejarahnya sebenarnya konsep MVC ini sudah ada sejak lama. Konsep MVC ini pertama kali diperkenalkan oleh para peneliti XEROX PARC yang bekerja dalam pembuatan bahasa pemrograman Smalltalk sekitar tahun 1970-1980. Pada dasarnya MVC adalah sebuah metode untuk membuat sebuah aplikasi dengan memisahkan data (Model), tampilan (View) dan cara bagaimana memprosesnya (Controller). Sampai saat ini framework yang dalam aplikasi website kebanyakan berbasis arsitektur MVC, misalnya CodeIgniter, Simphony, Kohana, cakePHP dan lain sebagainya. Kebanyakan framework yang ada sekarang ini bersifat open source sehingga siapapun bisa mengembangkannya sesuai dengan kebutuhan.Gambar disamping ini menjelaskan bagaimana konsep dasar struktur framework MVC. Sesuai dengan namanya konsep MVC terbagi menjadi tiga bagian yaitu Controller, Model dan View. Controller berfungsi sebagai sarana komunikasi (input/output) ke browser. Jadi setiap pengguna melakukan komunikasi dengan aplikasi web site pastinya pengguna tersebut berinteraksi dengan controller. Model berfungsi untuk input/output ke http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php- framework.html Tanggal 12-November 2013 Pukul 18:30

Upload: supriyadi

Post on 25-Oct-2015

79 views

Category:

Documents


1 download

DESCRIPTION

Membuat Sistem Core

TRANSCRIPT

Page 1: Tutorial Membangun Sistem Core.docx

Tutorial Membangun Sistem Core

Membuat framework PHP berbasis Model View Controller(MVC) ternyata tidak terlalu sulit.Pada

tahap ini akan dijelaskan tata cara pembuatan Controller,View dan struktur lainnya seperti Loader,

Register Object dan sebagainya. Sebelum kita mulai pembuatan framework-nya, alangkah lebih baik

dijelaskan terlebih dahulu apa latar belakang framework MVC.

Dilihat dari sejarahnya sebenarnya konsep MVC ini sudah ada sejak lama. Konsep MVC ini pertama kali

diperkenalkan oleh para peneliti XEROX PARC yang bekerja dalam pembuatan bahasa pemrograman

Smalltalk sekitar tahun 1970-1980. Pada dasarnya MVC adalah sebuah metode untuk membuat sebuah

aplikasi dengan memisahkan data (Model), tampilan (View) dan cara bagaimana memprosesnya

(Controller).

Sampai saat ini framework yang dalam aplikasi website kebanyakan berbasis arsitektur MVC, misalnya

CodeIgniter, Simphony, Kohana, cakePHP dan lain sebagainya. Kebanyakan framework yang ada

sekarang ini bersifat open source sehingga siapapun bisa mengembangkannya sesuai dengan

kebutuhan.Gambar disamping ini menjelaskan bagaimana konsep dasar struktur framework MVC.

Sesuai dengan namanya konsep

MVC terbagi menjadi tiga bagian yaitu Controller, Model dan View. Controller berfungsi sebagai sarana

komunikasi (input/output) ke browser. Jadi setiap pengguna melakukan komunikasi dengan aplikasi web

site pastinya pengguna tersebut berinteraksi dengan controller. Model berfungsi untuk input/output ke

database. Sedangkan view adalah sekumpulan tampilan baik itu HTML, CSS, Javascript dan lain

sebagainya.

Dalam tulisan kali ini sengaja di buat tema "Hierachical Framework MVC", memang framework ini

mendukung banyak aplikasi dalam satu framework. Jadi slogan yang diusung adalah "One Framework

Many application". Nah untuk membedakan aplikasi website satu dengan yang lain disusunlah model

hierarki. Konsep inilah yang membedakan framework ini dengan konsep framework CodeIgniter.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 2: Tutorial Membangun Sistem Core.docx

Tole : "Pakdhe..Pakdhe..coba sampean lihat gambarnya...kok mirip seperti becak

ya?  "

Pakdhe :"Huss...gimana to?kok mirip becak?apa gara-gara ada 3 bagian itu?oalah..imajinasi

sampean itu lho,kok ya aneh-aneh saja"

Tole :"Lha ya itu, coba to sampean perhatiin lagi...bener kan mirip becak?"

Pakdhe :"Whooo..iya ya...bener sampean, kalau tak perhatikan dengan seksama memang

mirip becak je.Ya sudah kalau begitu framework yang kita bikin nanti kita namakan becak

aja, piye?setuju nggak sampean?"

Tole : "wheladalah...setuju buanget Pakdhe...Becak MVC Framework made in Pakdhe

Sakiyun, keren kan Pakdhe "

Dari percakapan antara si Pakdhe Sakiyun dan Tole Dulkamit inilah, akhirnya muncul inspirasi tentang

penamaan framework yang dibangun ini. Dari hasil diskusi yang panjang lebar dan tentunya disertai

dengan proses semedi yang lama, maka framework ini sepakat dinamakan "Becak Model View

Controller" atau disingkat "Becak MVC"

OK,kita lanjutkan saja. Secara garis besar cara kerja framework kita ini dapat dilihat pada gambar

dibawah ini.

Nah..pada implementasinya, framework yang akan kita bangun nanti terdiri dari 5 sub sistem yaitu : sub

sistem core, databases, libraries, helpers dan aplication(controllers, models dan views versi pengembang

aplikasi website). Secara umum gambaran diagramnya terlihat seperti gambar dibawah ini. Hanya saja

dalam tulisan kali ini saya akan konsentrasi ke pembangunan sistem core saja. Untuk sub sistem yang

lain akan saya bahas dilain waktu.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 3: Tutorial Membangun Sistem Core.docx

Adapun susunan folder keseluruhan dari framework ini terlihat

seperti pada gambar disamping ini. Pada sub folder system (lingkaran nomor 1, warna hijau) terdapat 3

buah sub folder penting yaitu sub folder core, database, helpers dan libraries. Didalam ketiga folder iniliah

letak program inti dalam framework kita.

Jika secara keseluruhan framework ini saya analogikan sebagai mobil, maka sistem core ini ibaratnya

seperti mesinnya. penggerak utama dari keseluruhan sistem dalam framework ini adalah sistem core.

Sedangkan database, library dan helper adalah fungsi-fungsi tambahan sebagai pelengkap dari

keseluruhan sistem. Untuk database, library dan helper akan saya bahas pada artikel yang lain. Untuk

saat ini kita konsentrasi ke sistem core saja.

Sedangkan sistem application (lingkaran 2 warna merah) fungsinya untuk apa? pada application inilah

nantinya aplikasi web yang dikembangkan oleh pengguna framework ini berada. Jadi pada intinya Ibarat

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 4: Tutorial Membangun Sistem Core.docx

ingin membuat sebuah mobil, para pengembang aplikasi web itu tidak perlu lagi capek-capek membuat

semua komponen mobil mulai dari awal. Mereka cukup memanfaatkan dan merangkai fasilitas-fasilitas

yang sudah tersedia menjadi sebuah mobil. Dengan konsep kerja semacam ini tentunya siapapun akan

lebih mudah dalam mengembangkan sebuah aplikasi web. Hanya saja tata cara pembuatan web tersebut

tentunya harus mengikuti aturan main yang distandarisasikan oleh pengembang framework.

Jadi kesimpulannya framework ini boleh dimanfaatkan sebebas-bebasnya untuk membuat aplikasi

apapun asalkan para pengembang aplikasi web bersedia mengikuti aturan mainnya pakdhe Sakiyun.

Aturan mainnya bagaimana? gampang...sediakan saja sebungkus kopi dan segelas rokok pasti beres

urusannya :D

OK, kembali lagi ke sistem core, sebenarnya class yang paling pokok dalam sistem core tersebut adalah

class controller. Class controller inilah nantinya akan diturunkan (extends) ke semua class controller yang

dibuat oleh pengembang web site. Perlu kita pahami bahwa tugas utama class controller adalah memuat

(loaded) semua object yang dibutuhkan oleh sistem, seperti misalnya library, helper, database, view,

plugins dan lain sebagainya. Oleh karena itu agar codingnya tidak terlalu panjang maka fungsi-fungsi

untuk memuat berbagai macam object tersebut kita tuliskan kedalam class loader. Secara umum desain

class diagram sistem core ini terlihat seperti gambar dibawah ini.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 5: Tutorial Membangun Sistem Core.docx

Tole :"Pakdhe...kok kayaknya rumit ya?apa memang framework itu rumit?"

Pakdhe :"Yang rumit apanya Tole?ini kan baru pengantarnya saja, Pakdhe belum bahas

programnya lho"

Tole :"Waduh...pengantarnya saja sudah bikin saya pusing Pakdhe, apalagi programnya

Pakdhe "Sabar Tole, diikuti saja dulu nanti kan lama-lama ngerti juga.Makanya dengerin

Pakdhe cerita dulu biar nggak pusing

OK. Pertama-tama coba saya bahas bagaimana membangun modul core terlebih dahulu. Sebelum

dilanjut ke desain sistem, perlu saya jelaskan terlebih dahulu struktur directory modul core-nya. Lihat

gambar disamping. Perhatikan letak directory modul core (lingkaran nomor 1). Sedangkan

global_controller.php (lingkaran nomor 2) akan saya bahas lebih lanjut pada sub bagian 7 pada artikel ini.

Pada folder system/core tersebut terdapat 6 program yaitu :

1. base

2. bootstrap

3. common

4. controller

5. loader

6. model

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 6: Tutorial Membangun Sistem Core.docx

1. base.php

class base ini berfungsi untuk digunakan untuk menyimpan instance object. Dalam susunan hierarki,

base class ini menempati urutan tertinggi atau dapat diistilahkan root class. Tidak ada yang istimewa

dalam class ini. Hanya saja fungsi dasarnya adalah menukarkan isi variable object itu sendiri ($this) ke

variable $instance. Berikut ini script class base yang saya maksud.view plainprint?

1. <?php defined('SYS') or exit('Access Denied!');  2. /*  3. * Becak MVC Framework version 1.0  4. * 5. * File      : base.php 6. * Directory : system/core 7. * Author    : Eko Heri Susanto 8. * Description   : class base adalah class yang digunakan untuk menyimpan instance obje

ct 9. */  10. class base {  11.     private static $instance;  12.     public static $helpers = array();  13.     public static $models = array();  14.     public static $databases = array();  15.   16.     public function __construct(){  17.         self::$instance = &$this;  18.     }  19.     public static function getInstance(){  20.         return self::$instance;  21.     }  22. }  23.   24. function this(){ return base::getInstance(); }  25. ?>  

2. bootstrap

Bootstrap ini bukan sebuah class. program ini berfungsi hanya untuk meng-include-kan/memanggil

program-program penting lain yang diperlukan oleh aplikasi. Selain itu bootstrap ini juga berfungsi untuk

mengeksekusi controller yang yang dipanggil oleh user.view plainprint?

1. <?php defined('SYS') or exit('Access Denied!');  2. /*  3. * Becak MVC Framework version 1.0  4. * 5. * File      : becak.php 6. * Directory : system/core 7. * Author    : Eko Heri Susanto 8. * Description   : routine untuk memuat (loaded) system utama serta routine untuk menja

lankan default controller 9. */  10.   11. //panggil class inti (core)  12.   13.   14. require (SYS.'constant'.DS.'file.php');   15. require (SYS.'core'.DS.'common.php');  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 7: Tutorial Membangun Sistem Core.docx

16. require (SYS .'error'. DS .'errors.php');   17. require (SYS.'libraries'. DS .'benchmark_library.php');  18. $benchmark = common::register('Benchmark');  19. $benchmark->mark('total_execution_time_start');  20.   21. require (SYS.'core'.DS.'loader.php');  22. require (SYS.'core'.DS.'base.php');  23. require (SYS.'core'.DS.'controller.php');    24. require (SYS.'core'.DS.'model.php');  25.   26. require (SYS.'libraries'.DS.'router_library.php');    27. require (SYS.'libraries'.DS.'uri_library.php');  28. require (SYS.'libraries'.DS.'output_library.php');  29. require (SYS.'libraries'.DS.'config_library.php');  30.   31.   32. date_default_timezone_set(common::config_item('timezone_set'));  33.   34. $uri    = common::register('Uri');  35. $router = common::register('Router');  36. $output = common::register('Output');  37.   38. if ($output->_display_cache($uri) == TRUE) { exit; }  39.   40. $GLOBALS['d']   = $router->fetch_directory();   // Get requested directory  41. $GLOBALS['c']   = $router->fetch_class();       // Get requested controller  42. $GLOBALS['m']   = $router->fetch_method();      // Get requested method  43.   44. //panggil default controller pada directory application/controller  45. if(! file_exists(DIR.$GLOBALS['d'].DS.'controllers'.DS.$GLOBALS['c'].PHP_EXT)) {  46.     if($router->query_string)   47.         show_404("{$GLOBALS['d']}/{$GLOBALS['c']}/{$GLOBALS['m']}");  48.               49.         throw new Exception('Unable to load your default controller.Please make sure t

he controller specified in your Routes.php file is valid.');  50. }  51. require (DIR.$GLOBALS['d'].DS.'controllers'.DS.$GLOBALS['c'].PHP_EXT);  52.   53. if ( ! class_exists($GLOBALS['c'])   54. OR $GLOBALS['m'] == 'controller'  55. OR in_array(strtolower($GLOBALS['m']), array_map('strtolower', get_class_methods

('Controller')))  56. ){  57.     show_404("Class {$GLOBALS['d']}/{$GLOBALS['c']}/{$GLOBALS['m']}");  58. }  59.   60. $MC = new $GLOBALS['c']();  61.   62. if ( ! in_array(strtolower($GLOBALS['m']), array_map('strtolower', get_class_methods

($MC)))){  63.     show_404("{$GLOBALS['d']}/{$GLOBALS['c']}/{$GLOBALS['m']}");  64. }  65.   66. call_user_func_array(array($MC, $GLOBALS['m']), array_slice($uri->rsegments, 3));  67.   68. $output->_display();  69.   70. while (ob_get_level() > 0) { ob_end_flush(); }  71. ?>  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 8: Tutorial Membangun Sistem Core.docx

3. Common

Class common ini berisi penanganan fungsi-fungsi umum misalnya register object, membaca configurasi

dan operasi file. Telah disinggung diatas bahwa tugas dari class loader adalah memuat berbagai macam

object yang dibutuhkan oleh sistem. Dalam class ini ada 2 (dua) function yang sangat penting yaitu

singleton dan register. Apa itu singleton dan register? ada sub bab class Loader dibawah akan saya ulas

lebih lanjut.view plainprint?

1. <?php defined('SYS') or exit('Access Denied!');  2. /*  3. * Becak MVC Framework version 1.0  4. * 5. * File      : common.php 6. * Directory : system/core 7. * Author    : Eko Heri Susanto 8. * Description   : class umum 9. */  10.   11. //class registry digunakan untuk mendaftarkan variable menjadi object  12. class common {  13.     private static $object  = array();  14.     private static $instance;  15.   16.     //singleton  17.     private static function singleton(){  18.         if(!isset(self::$instance))  19.             self::$instance = new self();  20.         return self::$instance;   21.     }  22.     private function get($id){  23.         if(isset(self::$object[$id])){  24.             return self::$object[$id];  25.         }  26.         return NULL;  27.     }  28.     private function set($id, $value){  29.         self::$object[$id] = $value;  30.     }  31.     private static function getObject($id) {  32.         return self::singleton()->get($id);  33.     }  34.     private static function setObject($id, $instance){  35.         return self::singleton()->set($id, $instance);  36.     }  37.       38.     private static function get_static($filename = 'config', $var = '', $folder = '')  39.     {  40.         static $static = array();  41.   42.         if ( ! isset($static[$filename]))  43.         {  44.         if ( ! file_exists($folder. DS .$filename. PHP_EXT))   45.             throw new Exception('The static file '. DS .$folder. DS .$filename. PHP_EX

T .' does not exist.');  46.           47.         require($folder. DS .$filename. PHP_EXT);  48.           49.         if($var == '') $var = &$filename;  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 9: Tutorial Membangun Sistem Core.docx

50.           51.         if ( ! isset($$var) OR ! is_array($$var))  52.         {  53.             throw new Exception('The static file '. DS .$folder. DS .$filename. PHP_EX

T .' file does not appear to be formatted correctly.');  54.         }  55.           56.         $static[$filename] =& $$var;  57.          }  58.            59.         return $static[$filename];      60.     }  61.     public static function get_config($filename = 'config', $var = '')  62.     {  63.         return self::get_static($filename, $var, APP. DS. 'config');  64.     }  65.   66.     /* Fungsi register digunakan untuk mendaftarkan variable menjadi object.*/  67.     public static function register($ClassName){  68.         $Obj = self::singleton();  69.         $ClassName = strtolower($ClassName);  70.         if($Obj->getObject($ClassName) != NULL){  71.             return $Obj->getObject($ClassName);    72.         }   73.         $Class = $ClassName;  74.         $Obj->setObject($ClassName, new $Class());  75.         $Object = $Obj->getObject($ClassName);  76.         if(is_Object($Object)) return $Object;  77.     }  78.     public static function config_item($item, $config_name = 'config')  79.     {  80.         static $config_item = array();  81.   82.         if ( ! isset($config_item[$item]))  83.         {  84.         $config_name = self::get_config($config_name);  85.         if ( ! isset($config_name[$item])) return FALSE;  86.           87.         $config_item[$item] = $config_name[$item];  88.         }  89.         return $config_item[$item];  90.     }  91.     public static function is_really_writable($file)  92.     {      93.         // If we're on a Unix server with safe_mode off we call is_writable  94.         if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE)  95.         {  96.         return is_writable($file);  97.         }  98.   99.         // For windows servers and safe_mode "on" installations we'll actually  100.         // write a file then read it.  Bah...  101.         if (is_dir($file))  102.         {  103.         $file = rtrim($file, '/').'/'.md5(rand(1,100));  104.   105.         if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)  106.         {  107.             return FALSE;  108.         }  109.   

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 10: Tutorial Membangun Sistem Core.docx

110.         fclose($fp);  111.         @chmod($file, DIR_WRITE_MODE);  112.         @unlink($file);  113.         return TRUE;  114.         }  115.         elseif (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)  116.         {  117.         return FALSE;  118.         }  119.   120.         fclose($fp);  121.         return TRUE;  122.     }  123. }//end class  124. ?>  

4. Controller

Seperti yang sudah saya jelaskan diatas, class controller inilah dijadikan induk dari keseluruhan controller

yang dibuat oleh user. Pada class ini hanya terdapat konstrktor yang menjalankan function _init, dimana

dalam function _init tersebut bertugas mendaftarkan library utama guna mendukung jalannya aplikasi.

Apa itu library utama? nanti saya jelaskan di artikel lain yang khusus membahas tentang library.view plainprint?

1. <?php defined('SYS') or exit('Access Denied!');  2. /*  3. * Becak MVC Framework version 1.0  4. * 5. * File      : controller.php 6. * Directory : system/core 7. * Author    : Eko Heri Susanto 8. * Description   : class controller ini adalah induk dari semua controller 9. */  10. require(APP .'globals'. DS .'global_controller'. PHP_EXT);   11.   12. class controller extends global_controller {  13.     public function __construct(){  14.         parent::__construct();  15.         $this->_init();    16.     }  17.     private function _init()  18.         {  19.         $Classes = array(                           20.                             'config'    => 'Config',  21.                             'router'    => 'Router',  22.                             'uri'       => 'URI',   23.                             'output'    => 'Output'   24.                         );  25.                           26.         foreach ($Classes as $public_var => $Class)  27.         {  28.             $this->$public_var = common::register($Class);  29.         }  30.     }  31. }//end class  32. ?>  

5. Loader

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 11: Tutorial Membangun Sistem Core.docx

Telah disinggung diatas bahwa tugas class loader adalah memuat berbagai macam object yang

dibutuhkan oleh sistem. Namun kenyataannya pada saat memuat sebuah object, bisa saja object yang

sama sudah pernah termuat sebelumnya. Jika hal ini dibiarkan maka akan mengakibatkan terjadinya

penumpukan inisialisasi object yang sama pada memory. Penumpukan inisialisasi object ini tentu saja

mengakitbatkan pemborosan pemakaian memory. Untuk menghindari hal tersebut maka dibutuhkan pola

desain (design pattern) singleton yang contoh programmnya sudah saya copy-paste pada sub bab

common diatas.

Tugas utama  singleton adalah memastikan bahwa tidak ada object yang sama dimuat lebih dari satu

kali. Penghematan penggunaan memory wajib kita lakukan dengan harapan manakala web site kita

sudah diakses oleh banyak orang, maka bisa kita minimalisir kemungkinan terjadinya macet (down) web

server kita. Pada contoh program yang saya lampirkan, penulisan fungsi singleton ini bisa anda temui

pada file common.php. Berikut ini source code class Loader yang saya maksud.view plainprint?

1. <?php defined('SYS') or exit('Access Denied!');  2. /*  3. * Becak MVC Framework version 1.0  4. * 5. * File      : loader.php 6. * Directory : system/core 7. * Author    : Eko Heri Susanto 8. * Description   : class loader berfungsi untuk memuat (loaded) library, helper, view, 

model   9. */  10. class loader {  11.     private static $helpers = array();  12.     private static $sys_helpers = array();  13.     public static function sys_library($library){  14.         self::_library($library, 'system');  15.     }  16.     public static function app_library($library){  17.         self::_library($library, 'application');  18.     }  19.     public static function library($library){  20.         self::_library($library, 'directories');  21.     }  22.     private static function _library($library, $folder = 'system'){  23.         if($library=='')return false;  24.         $library = strtolower($library);  25.         switch($folder){  26.             case 'system'       : $lib_folder = SYS.'libraries'.DS;break;  27.             case 'application'  : $lib_folder = APP.'libraries'.DS;break;  28.             case 'directories'  : $lib_folder = DIR.

$GLOBALS['d'].DS.'libraries'.DS;break;  29.         }  30.         if(file_exists($lib_folder.$library.'_library'.PHP_EXT )) {   31.             require ($lib_folder.$library.'_library'.PHP_EXT );  32.             base::getInstance()->$library = common::register($library);  33.         } else throw new Exception("Can't load library file: " . $library);  34.     }  35.     public static function sys_helper($helper) {  36.         self::_helper($helper, 'system');  37.         }  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 12: Tutorial Membangun Sistem Core.docx

38.     public static function app_helper($helper='') {  39.         self::_helper($helper, 'application');  40.     }  41.     public static function helper($helper =''){  42.         self::_helper($helper, 'directories');  43.     }  44.     private static function _helper($helper, $folder = 'system') {  45.         if($helper=='')return false;  46.         if( isset(self::$helpers[$helper]) ){  47.             return;   48.         }  49.         $helper = strtolower($helper);  50.         switch($folder){  51.             case 'system'       : $hlp_folder = SYS.'helpers'. DS;break;  52.             case 'application'  : $hlp_folder = APP.'helpers'. DS;break;  53.             case 'directories'  : $hlp_folder = DIR.

$GLOBALS['d'].DS.'helpers'.DS;break;  54.         }  55.         if(file_exists($hlp_folder . $helper.'_helper'. PHP_EXT)){  56.             include($hlp_folder . $helper.'_helper'. PHP_EXT);  57.             self::$helpers[$helper] = $helper;  58.             return;      59.         } else throw new Exception("Can't load helper file: " . $helper);  60.     }  61.     public static function app_model($model_name){  62.         self::_model($model_name, 'application');  63.     }  64.     public static function model($model_name){  65.         self::_model($model_name, 'directories');  66.     }  67.     private static function _model($model_name, $folder = 'system'){  68.         if($model_name=='')return;  69.         $model_name = strtolower($model_name);  70.         $model_var = &$model_name;  71.             if (isset(base::getInstance()->$model_var) AND is_objec

t(base::getInstance()->$model_var))  72.         { return; }  73.         switch($folder){  74.             case 'application'  : $mdl_folder = APP.'models'.DS;break;  75.             case 'directories'  : $mdl_folder = DIR.

$GLOBALS['d'].DS.'models'.DS;break;  76.         }  77.         if(file_exists($mdl_folder.$model_name.PHP_EXT )) {   78.             require ($mdl_folder.$model_name.PHP_EXT );  79.             base::getInstance()->$model_var = new $model_name();  80.             base::getInstance()->$model_var->_assign_db_objects();  81.                 base::$models[$model_var] = base::getInstance()->$model_var;  82.         } else throw new Exception("Can't load model file: " . $model);  83.     }  84.     public static function database($db_name = 'db'){  85.         $db_var = $db_name;  86.         $obj = base::getInstance();  87.         if (isset($obj->{$db_var}) AND is_object($obj->{$db_var}) ) {  88.             return;  89.         }  90.         require (SYS .'database'. DS .'db_factory'. PHP_EXT);  91.         $obj->{$db_var} = db_factory::callDB($db_name);  92.             base::$databases[$db_var] = $db_var;   93.         if (count(base::$models) >= 0) {  94.             foreach (base::$models as $model_name)  95.                 $obj->$model_name->$db_var = &$obj->$db_var;  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 13: Tutorial Membangun Sistem Core.docx

96.         }  97.     }  98. }//end class loader  99. ?>  

6. Model

Terakhir adalah class model. Class ini difungsikan sebagai induk dari model yang dibuat oleh user. Class

model ini sebenarnya hanya berfungsi untuk mendaftar instance database ke base class.

Pertanyaannyam kenapa kok instance database tersebut perlu disimpan dan didaftarkan? Framework ini

memang didesain mampu mendukung multi connection database. Dikarenakan hal itulah maka masing-

masing koneksi perlu disimpan ke memory agar supaya jikalau ada banyak koneksi database yang harus

dijalankan,  maka variable koneksi tersebut masih tersimpan di memory dan masih bisa digunakan.view plainprint?

1. <?php defined('SYS') or exit('Access Denied!');  2. /*  3. * Becak MVC Framework version 1.0  4. * 5. * File      : model.php 6. * Directory : system/core 7. * Author    : Eko Heri Susanto 8. * Description   : class model ini adalah induk dari semua model 9. */  10.   11. class model extends base {  12.     public function __construct(){  13.         $this->_assign_db_objects();  14.     }  15.     public function _assign_db_objects(){  16.         foreach(base::$databases as $key){  17.             $this->$key = &base::getInstance()->$key;  18.         }  19.     }  20.       21. }//end class model  22. ?>  

7. Global controller

Global controller adalah class yang digunakan untuk deklarasi variable-variable global, misalnya

base_url, directory resource gambar, CSS, javascript dsb. Atau bisa juga digunakan untuk memanggil

library dan helper yang nantinya digunakan pada seluruh aplikasi. Lokasi program global controller pada

framework ini tersimpan di folder application/globals(Lihat gambar diatas-lingkaran nomor 2). Global

controller ini sebenarnya mempunyai fungsi yang mirip seperti perintah $_GLOBAL. Jadi pada class inilah

tempat mendeklarasikan semua variabel-variabel ataupun function yang sifatnya umum.view plainprint?

1. <?php  defined('SYS') or exit('Access Denied!');  2. class global_controller extends base {  3.     public $base, $base_url, $base_img;  4.         public $title, $head, $meta;  5.     public $calendar='';  6.     public function  __construct(){  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 14: Tutorial Membangun Sistem Core.docx

7.         parent::__construct();  8.         loader::sys_helper('view');  9.         loader::sys_helper('head_tag');  10.         $this->base     = common::config_item('base_url');  11.         $this->base_url = common::config_item('base_url')  . common::config_item

('index_page');  12.         $this->base_img = common::config_item('source_url').'images/';  13.         $this->meta     = meta('Content-type', 'text/html; charset=utf-8', 'equiv');  14.         $this->meta    .= meta('author', 'Eko Heri Susanto');  15.     }  16. }  17. ?>  

8. Index.php

Tentunya anda sudah paham apa kegunaan dari index.php kan? apa hayo? Index.php adalah file yang

secara default akan dijalankan pertama kali ketika ada user (pengguna) yang mengkases web site. Nah

ini source code-nya

view plainprint?

1. <?php  2. error_reporting(E_ALL | E_STRICT);   3. define('DS',   DIRECTORY_SEPARATOR);   4. define('SYS',  'system'.DS);   5. define('APP',  'application'.DS);  6. define('DIR',  APP . 'directories'.DS);  7. define('PHP_EXT',  '.php');  8. define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));  9. if ( get_magic_quotes_gpc() ) {  10.       11.     function stripslashes_gpc(&$value){  12.         $value = stripslashes($value);  13.     }  14.       15.     array_walk_recursive($_GET, 'stripslashes_gpc');  16.     array_walk_recursive($_POST, 'stripslashes_gpc');  17.     array_walk_recursive($_COOKIE, 'stripslashes_gpc');  18.     array_walk_recursive($_REQUEST, 'stripslashes_gpc');  19. }  20. require(SYS .'core'.DS.'bootstrap.php');   21. ?>  

Sampai disini pembahasan modul core (inti) selesai. Untuk library routing dan uri tidak saya bahas disini.

Silahkan anda ikuti artikel saya berikutnya.

Tutorial Membangun Sistem Database

Operasi database adalah salah satu fasilitas yang mutlak harus ada dalam sebuah framework MVC.

Pada tulisan kali saya akan mengulas bagaimana membuat class Model dan fungsi-fungsi untuk operasi

database.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 15: Tutorial Membangun Sistem Core.docx

Dalam pemrograman PHP terdapat beberapa cara untuk mengoperasikan database khususnya mysql,

antara lain menggunakan metode klasik yaitu dengan memanfaatkan fungsi bawaan (mysql_connect,

mysql_select_db, mysql_query). Codeigniter merupakan salah satu contoh framework MVC yang

memanfaatkan operasi klasik ini(http://www.codeigniter.com).

Selain operasi database klasik diatas, saat ini sudah tersedia modul PHP Data Object (PDO). PDO

didesain mampu men-support banyak engine database misalnya MySql, Oracle, PostgresSQL, Ms Sql

server dsb. PDO mendukung pemrograman berorientasi object (OOP), sehingga syntax

pemrogramannya lebih sistematis dan mudah digunakan. Sayangnya tidak semua web hosting telah

mengaktifkan modul PDO, bahkan ada juga web hosting yang tidak menyediakan modul PDO ini. Salah

satu framework yang memanfaatkan operasi database PDO adalah Obullo (http://www.obullo.com).

Memang operasi database klasik maupun PDO mempunyai kelebihan dan kelemahan. Oleh karena itu

pada framework ini sengaja saya sediakan dua-duanya. Jadi nantinya programmer bisa memilih, bisa

menggunakan operasi database klasik atau PDO.

Tole : "Pakdhe..pakdhe, kalau framework sampean ini mendukung  dua operasi database

apa tidak semakin berat kerja server-nya Pakdhe?"

Pakdhe : "Ya tidaklah Tole, kan nantinya programmer milih salah satu, dan ketika salah

satu operasi tadi dipilih operasi yang lain tidak di-load, jadi tidak berat kerja server-nya"

Tole :"O..gitu to Pakdhe,ya sudah Pakdhe, tak simaknya dulu ntar nanti kita buktikan ya

Pakdhe...kerja servernya berat apa tidak"

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 16: Tutorial Membangun Sistem Core.docx

Pada implementasinya, sengaja saya gunakan design pattern

factory, adapter dan driver. Hal ini bertujuan agar framework ini fleksibel dan mudah untuk digunakan

oleh programmer yang lain. Untuk lebih memudahkan dalam pembuatan program, sengaja operasi

database ini saya letakkan pada folder system/database. Adapun susunan direktori operasi database ini,

terlihat seperti gambar disamping ini.

Driver database yang saya sediakan hanya mysql. Dilain waktu saya akan menambahkan driver untuk

database lain misalnya Oracle, MS SQL Server, Postgres SQL dan sebagainya. Tentunya masing-

masing driver tersebut mendukung operasi klasik dan PDO.

1. Factory

Jika kita baca di bukunya Gang of Four "Design Patterns: Elements of Reusable Object-Oriented

Software", factory ini tergolong dalam kreasional desain. Factory tersebut perlu kita buat ketika kita perlu

mendefinisikan sebuah tipe data/class (kita sebut kreator)  yang berfungsi untuk membuat objek dari tipe

data/class yang berbeda (kita sebut produk).  Tujuannya adalah agar pengguna tidak perlu capek-capek

mempelajari class produk tadi. Pada framework ini yang disebut factory adalah class db_factory

sedangkan yang disebut class produk adalah db_adapter. Dalam literatur lain, saya menemukan ada

sistem dependency injection. Sistem dependency injection ini lebih sederhana dibandingkan dengan

factory. Oleh karena itu dalam pembuatan program kali ini saya memanfaatkan dependency injection

dalam membangun class database factory. Dibawah ini contoh source code class db_factoryview plainprint?

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 17: Tutorial Membangun Sistem Core.docx

1. <?php defined('SYS') or exit('Access Denied!');  2. /*  3. * Becak MVC Framework version 1.0  4. * 5. * File      : db_factory.php 6. * Directory : system/database 7. * Author    : Eko Heri Susanto 8. * Description   : penyedia koneksi ke bermacam-macam database 9. */  10. class db_factory {  11.     public static function callDB($db_name){  12.         include APP.'config'.DS.'database'.PHP_EXT;  13.         if(!is_array($config[$db_name]))   14.             throw new Exception("Please set a valid database driver from config databa

se file");  15.         $driver_class = strtolower($config[$db_name]['type']);  16.         include SYS.'database'.DS.'driver'.DS.$driver_class.PHP_EXT;  17.         include SYS.'database'.DS.'db_adapter'.PHP_EXT;  18.             $driver = new $driver_class($config[$db_name]);   19.         $adapter = new db_adapter($driver);  20.         return $adapter;  21.     }//end callDB  22. }//end class  23. ?>  

2. Adapter

Telah saya sebutkan diatas, operasi database dalam framework ini mendukung banyak driver database.

(mysql, oracle ms-sql server dsb). Sebenarnya masing-masing driver tersebut cara penggunaannya tentu

berbeda antara satu dengan yang lain. Oleh karena itu kita perlu design pattern adapter agar pengguna

tidak perlu memikirkan bagaimana cara mengoperasikan masing-masing driver tersebut.

Gambar disamping menunjukkan desain sistem

db_factory dan db_adapter yang sudah saya jelaskan sebelumnya.

Fungsi/method callDB pada class db_factory ini nantinya akan dipanggil pada fungsi database yang ada

di class loader. Untuk lebih jelasnya silakan anda lihat contoh source code yang saya sertakan. Ingat

class loader ini terdapat pada folder core.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 18: Tutorial Membangun Sistem Core.docx

Coba anda perhatikan method yang terdapat pada db_adapter, disitu terdapat metode-metode untuk

mengoparesikan database seperti pencarian (select), penambahan (insert), perubahan (update) dan

penghapusan (delete) data. Saya temukan dibeberapa contoh framework, method-method ini ada yang

menyebutnya dengan istilah active record. Dibeberapa buku design pattern active record ini sudah diakui

sebagai salah satu pola dalam design pattern. Dibawah ini contoh source code class db_adapterview plainprint?

1. <?php defined('SYS') or exit('Access Denied!');  2. /*  3. * Becak MVC Framework version 1.0  4. * 5. * File      : db_adapter.php 6. * Directory : system/database 7. * Author    : Eko Heri Susanto 8. * Description   : fungsi common (CRUD) untuk database 9. */  10. class db_adapter {  11.     private $driver = null;  12.     private $sql = '';  13.     public function __construct($driver){  14.         $this->driver = $driver;  15.         $this->driver->connect();  16.     }  17.     public function __destruct(){  18.         $this->driver->disconnect();  19.     }  20.     public function select($sql){  21.         $this->sql = $sql;  22.     }  23.     public function fetch_array(){  24.         return $this->driver->results($this->sql, 'array');  25.     }  26.     public function fetch_object(){  27.         return $this->driver->results($this->sql, 'object');  28.     }  29.     public function query($sql){  30.         return $this->driver->query($sql);  31.     }  32.     public function insert($table, $data){  33.         $sql = "INSERT INTO ".$table;  34.         $multi_rows = FALSE;  35.         foreach($data as $key => $val){  36.             if(!is_array($val) ) {  37.                 $fields[$key] = $key;  38.                 $rows[$key] = $this->escape($val);  39.             }else {  40.                 $multi_rows = TRUE;  41.                 foreach($val as $skey => $sval){  42.                     $fields[$skey] = $skey;  43.                     $row[$skey] = $this->escape($sval);  44.                 }  45.                 $rows[$key] = "(".implode(', ', $row).")";  46.             }  47.         }  48.         $sql .= " (". implode(', ', $fields).") VALUES ";  49.         if(!$multi_rows) $sql .= "(". implode(', ', $rows).");";  50.         else $sql .= implode(', ', $rows).";";  51.         return $this->driver->query($sql);  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 19: Tutorial Membangun Sistem Core.docx

52.         }  53.     public function update($table, $data, $where=NULL){  54.         $sql = "UPDATE ".$table." SET ";  55.         $values = array();  56.         foreach($data as $key => $val){  57.             $values[$key] = $key." = ".$this->escape($val);  58.         }  59.         $sql .= implode(", ", $values);  60.         if(is_array($where)){  61.             $filter = array();  62.             foreach($where as $key => $val){  63.                 $filter[$key] = "(".$key." = ".$this->escape($val).")";  64.             }  65.             $sql .= " WHERE ".implode(" AND ", $filter);  66.         }  67.         return $this->driver->query($sql);  68.     }  69.     public function delete($table, $where=NULL){  70.         $sql = "DELETE FROM ".$table;  71.         if(is_array($where)){  72.             $filter = array();  73.             foreach($where as $key => $val){  74.                 $filter[$key] = "(".$key." = ".$this->escape($val).")";  75.             }  76.             $sql .= " WHERE ".implode(" AND ", $filter);  77.         }  78.         return $this->driver->query($sql);  79.     }  80.       81.     private function escape($str)  82.         {  83.         if(is_string($str)){  84.             return "'".str_replace("'", "''",$str)."'";  85.         }  86.   87.         if(is_integer($str))  88.         return (int)$str;  89.   90.         if(is_double($str))  91.         return (double)$str;  92.   93.         if(is_float($str))  94.         return (float)$str;  95.   96.         if(is_bool($str))  97.         return ($str === FALSE) ? 0 : 1;  98.   99.         if(is_null($str))  100.         return 'NULL';  101.         }  102. }//end class  103. ?>  

3. Driver

OK, selanjutnya mari kita lanjutkan untuk membahas class driver. Ingat class driver ini merupakan tata

cara pengoperasian database yang sesungguhnya. Gambar dibawah ini menjelaskan struktur desain

sistem driver database.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 20: Tutorial Membangun Sistem Core.docx

Berikut ini contoh source code class mysql (operasi database klasik)

view plainprint?

1. <?php defined('SYS') or exit('Access Denied!');  2. /*  3. * Becak MVC Framework version 1.0  4. * 5. * File      : mysql.php 6. * Directory : system/database/driver 7. * Author    : Eko Heri Susanto 8. * Description   : driver mysql 9. */  10. class mysql {  11.     private $conn;  12.     private $config;  13.     public function __construct($config){  14.         $this->config    = $config;  15.     }  16.     public function connect() {  17.         extract($this->config);  18.         if(isset($this->conn)) return $this->conn;  19.         $this->conn = @mysql_connect($server,$user,$password, true) or show_error

("Unable connect to mysql server.Please make sure the server, username or password specified in your Database.php file is valid.");   

20.         @mysql_select_db($database, $this->conn) or show_error("Unable to select your default database name.Please make sure the database name specified in your Database.php file is valid.");  

21.     }  22.     public function disconnect(){  23.         if(isset($this->conn)) {  24.             @mysql_close($this->conn);  25.         }  26.     }  27.     public function query($sql){  28.         $result = @mysql_query($sql, $this->conn);  29.         if (!$result) {  30.                 show_error(mysql_error());  31.         }  32.         return $result;  33.     }  34.     public function results($query, $type = 'object'){  35.         $result = $this->query($query);  36.         $return = array();  37.         while ($row = @mysql_fetch_object($result)) {  38.             if($type == 'array')  39.                 $return[] = (array) $row;  40.             else  41.                 $return[] = $row;  42.         }  43.         @mysql_free_result($result);  44.         return @$return;  45.     }  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 21: Tutorial Membangun Sistem Core.docx

46. }//end class  47. ?>  

Berikut ini contoh source code class mysql_pdo (operasi database PDO)

view plainprint?

1. <?php defined('SYS') or exit('Access Denied!');  2. /*  3. * Becak MVC Framework version 1.0  4. * 5. * File      : pdo_mysql.php 6. * Directory : system/database/driver 7. * Author    : Eko Heri Susanto 8. * Description   : driver PDO mysql 9. */  10. class mysql_pdo {  11.     private $conn;  12.     private $config;  13.     public function __construct($config){  14.         $this->config    = $config;  15.     }  16.     public function connect() {  17.         extract($this->config);  18.         if(isset($this->conn)) return $this->conn;  19.         try{  20.             $this->conn = new PDO ("mysql:host=$server;dbname=$database",$user,

$password);  21.         }catch(PDOException $e){  22.             echo __LINE__.$e->getMessage();  23.         }  24.     }  25.     public function disconnect(){  26.         if(isset($this->conn)) {  27.             $this->conn = null;  28.         }  29.     }  30.     public function query($sql){  31.         $result = null;       32.         try{  33.             $result = $this->conn->exec($sql) or print_r($this->conn->errorInfo());  34.         }catch(PDOException $e){  35.             echo __LINE__.$e->getMessage();  36.         }  37.         return $result;  38.     }  39.     public function results($query, $type = 'object'){  40.         $result = $this->conn->query($query) or print_r($this->conn->errorInfo());  41.         $result->setFetchMode(PDO::FETCH_ASSOC);  42.         return $result;  43.     }  44. }//end class  45. ?>  

Sampai disini pembahasan mengenai operasi database sudah selesai. Selanjutnya coba saya jelaskan

bagaimana cara menjalankan contoh program yang saya sertakan.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 22: Tutorial Membangun Sistem Core.docx

Pertama-tama anda siapkan dulu database-nya. Caranya buka phpmyadmin, kemudian buat database

baru dengan nama blogkomputer. Setelah itu silakan anda buat table content seperti contoh dibawah ini.

view plainprint?

1. CREATE TABLE `blogkomputer`.`content` (  2. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,  3. `judul` VARCHAR( 100 ) NOT NULL ,  4. `kategori` VARCHAR( 100 ) NOT NULL ,  5. `isi` TEXT NOT NULL  6. ) ENGINE = MYISAM ;  

Setelah table-nya selesai anda buat, jangan lupa isikan contoh datanya. Ini saya sertakan query untuk

mengisi data table content tersebut

view plainprint?

1. INSERT INTO `blogkomputer`.`content` (`id`, `judul`, `kategori`, `isi`) VALUES (NULL, 'Ini adalah judul 1', 'pemrograman', 'isi sembarang data disini'), (NULL, 'ini adalah judul 2', 'becak framework', 'becak framework adalah framework MVC yang mendukung PHP 5');  

Langkah kedua coba anda buka file database.php, yang terdapat pada folder application/config,

kemudian lakukan pengaturan (setting) konfigurasi database. Lihat contoh dibawah iniview plainprint?

1. $config = array();  2.   3. // jika ingin menggunakan PDO ubah mejadi 'mysql_pdo'  4. $config['db']['type']       = 'mysql';   5.   6. // jika anda menggunakan PDO, ubah menjadi '127.0.0.01'  7. $config['db']['server']     = 'localhost';   8.   9. //sesuaikan dengan user yang ada di database mysql anda  10. $config['db']['user']       = 'root';  11.   12. //sesuaikan dengan password mysql anda  13. $config['db']['password']   = '';  14.   15. //sesuaikan dengan nama database yang anda buat  16. $config['db']['database']   = 'blogkomputer';  

Cukup sampai disini, kedepan akan saya bahas bagaimana membuat library, helper serta menambah

error handling.

Selamat mencoba, semoga ada guna dan manfaatnya...

Tutorial Membangun Sistem Library

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 23: Tutorial Membangun Sistem Core.docx

Sebenarnya apa sih kegunaan dari library tersebut? seberapa pentingkah keberadaan si raden

bagus library tersebut? Library itu adalah berisi sekumpulan class/object yang sering digunakan dalam

membangun aplikasi web kita. Oleh karena sering digunakan maka class tersebut distandarisasikan agar

pengembang web site dapat memanfaatkan fungsi-fungsi tersebut dengan mudah.  Sebagai contoh

dalam beberapa framework MVC disediakan library calendar yang berfungsi untuk menampilkan

kalender, library pagination berfungsi untuk menampilkan paging pada halaman web site, library email

berfungsi untuk mengirimkan email dan lain sebagainya.

Terdapat lima library core pada Framework MVC yaitu Router, Uri, Output, Config dan Benchmark.

Kelima library ini dikategorikan library inti dikarenakan setiap aplikasi web dijalankan kelima library ini

selalu dipanggil secara terus menerus. Kali ini pakdhe Sakiyun akan mencoba mengulas tentang apa

fungsi dan bagaimana source code kelima library tersebut. Tidak lupa kelima library ini tentunya

merupakan serangkaian artikel bersambung kita dalam rangka membangun framework becak MVC.

Tole Dulkamit : wee...lhadalah...ternyata becak sampean itu ada library-nya to pakdhe? itu

kok nama library-nya menakutkan to pakdhe?Lihat namanya saja saya kok sudah merinding

duluan...suerem bin sangar lho pakdhe...

Pakdhe Sakiyun : tenang Tole..tinggal copy-paste aja lho kok repot to sampean itu? Pakdhe

aja nggak takut kok sampean takut to?

Tole Dulkamit : byuh..sakti benar pakdhe ini bisa bikin library yang menyeramkan seperti

itu.

Pakdhe Sakiyun : yang sakti itu yang punya ide dan yang bisa bikin library-nya Tole..lha

emangnya pakdhe bikin sendiri?..ya nggaklah Tole. Sama seperti sampean pakdhe juga

tinggal copy-paste aja dari punyanya orang tapi pakdhe pasang di becak pakdhe...Pakdhe

hanya nyomot dari library-nya CodeIgniter dan Obullo saja kok Tole..

1. Uri dan Routing

Kita awali dulu untuk membahas library Uri dan Routing. Sesuai dengan namanya kedua library ini

berfungsi untuk pengaturan pembacaan Uniform Resource Locator (URL). Para pembaca pastinya sudah

terbiasa dengan  istilah URL kan? iya betul..setiap kali kita ingin mengakses sebuah situs pastinya kita

selalu mengetikkan alamat situs web tersebut pada browser kita. Sayapun juga yakin dengan seyakin

yakinnya kalau pembaca juga sudah memahami apa dan untuk apa itu query string. Query string sering

digunakan jikalau pengguna web site ingin mengirimkan (passing) parameter ke server melalui URL.

Nah...ini dia...fungsi kedua library tersebut barulah berguna ketika si pengembang website berkeinginan

untuk mempercanti/memperindah URL. Ini yang aneh kali ya...cuman ketikkan saja kok minta diperindah

kayak syair saja. Biar tau betapa cantiknya sebuah URL, coba anda lihat gambar dibawah ini

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 24: Tutorial Membangun Sistem Core.docx

Anda tau bukan? kalau yang dibelakangnya index.php (mulai gambar nomor 3 sampai dengan nomor 8)

itu sebenarnya adalah parameter? nah kalau tanpa menggunakan library Uri dan Routing tentunya URL-

nya tidak seperti gambar diatas, tapi berbentuk seperti ini :

http://blogkomputer.com/index.php?d=web&c=page&m=content&data1=1&data2=Tutorial-

Membangun-Sistem-Core

Yang dimaksud paramater tersebut adalah sebagai berikut :

d adalah directory : merupakan lokasi directory file controller-nya

c adalah controller : merupakan nama controller yang dijalankan

m adalah method : merupakan nama method/function yang ada di dalam class controller

data1, data2 data 3 dst : merupakan data parameter yang dibutuhkan oleh si method tadi.

Coba bandingkan URL yang dibawah dengan gambar URL yang diatas tadi..lebih cantik mana hayo?

Saya yakin semua orang akan menjawab lebih cantik ibu saya, soalnya kalau ibu saya tidak cantik nggak

mungkin ibu saya dinikahi bapak saya dan punya anak saya..

Jadi secara singkat fungsi library Uri itu untuk mem-parsing URL yang dikirim oleh browser, sedangkan

Router berfungsi untuk mengambil (fetch) query string tadi untuk selanjutnya parameter-parameter tadi

akan di-eksekusi oleh framework.

Dibawah ini adalah source library Uri

view plain print ?

1. <?php defined('SYS') or exit('Access Denied!');  2. class Uri  3. {  4.     public $keyval      = array();  5.     public $uri_string;  6.     public $segments    = array();  7.     public $rsegments   = array();  8.       9.     public function __construct(){  10.         //log_message('debug', "URI Class Initialized");  11.     }  12.     public function _fetch_uri_string()  13.     {  14.         if (strtoupper(common::config_item('uri_protocol')) == 'AUTO')  15.         {  16.             if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')  17.             {  18.                 $this->uri_string = key($_GET);  19.                 return;  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 25: Tutorial Membangun Sistem Core.docx

20.             }  21.             $path = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : 

@getenv('PATH_INFO');              22.             if (trim($path, '/') != '' && $path != "/".SELF)  23.             {  24.                 $this->uri_string = $path;  25.                 return;  26.             }  27.             $path =  (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : 

@getenv('QUERY_STRING');      28.             if (trim($path, '/') != '')  29.             {  30.                 $this->uri_string = $path;  31.                 return;  32.             }  33.             $path = (isset($_SERVER['ORIG_PATH_INFO'])) ? $_SERVER['ORIG_PATH_INFO'] : 

@getenv('ORIG_PATH_INFO');      34.             if (trim($path, '/') != '' && $path != "/".SELF)  35.             {  36.                 $this->uri_string = str_replace($_SERVER['SCRIPT_NAME'], '', $path);  37.                 return;  38.             }  39.             $this->uri_string = '';  40.         }  41.         else  42.         {  43.             $uri = strtoupper(config_item('uri_protocol'));  44.               45.             if ($uri == 'REQUEST_URI')  46.             {  47.                 $this->uri_string = $this->_parse_request_uri();  48.                 return;  49.             }  50.               51.             $this->uri_string = (isset($_SERVER[$uri])) ? $_SERVER[$uri] : 

@getenv($uri);  52.         }  53.           54.         if ($this->uri_string == '/')  55.         {  56.             $this->uri_string = '';  57.         }          58.     }  59.   60.     public function _parse_request_uri()  61.     {  62.         if ( ! isset($_SERVER['REQUEST_URI']) OR $_SERVER['REQUEST_URI'] == '')  63.         {  64.             return '';  65.         }  66.           67.         $request_uri = preg_replace("|/(.*)|", "", str_replace("\", "/", $_SERVE

R['REQUEST_URI']));  68.   69.         if ($request_uri == '' OR $request_uri == SELF)  70.         {  71.             return '';  72.         }  73.           74.         $fc_path = FCPATH.SELF;          75.         if (strpos($request_uri, '?') !== FALSE)  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 26: Tutorial Membangun Sistem Core.docx

76.         {  77.             $fc_path .= '?';  78.         }  79.           80.         $parsed_uri = explode("/", $request_uri);  81.                   82.         $i = 0;  83.         foreach(explode("/", $fc_path) as $segment)  84.         {  85.             if (isset($parsed_uri[$i]) && $segment == $parsed_uri[$i])  86.             {  87.                 $i++;  88.             }  89.         }  90.           91.         $parsed_uri = implode("/", array_slice($parsed_uri, $i));  92.           93.         if ($parsed_uri != '')  94.         {  95.             $parsed_uri = '/'.$parsed_uri;  96.         }  97.   98.         return $parsed_uri;  99.     }  100.   101.     public function _filter_uri($str)  102.     {  103.         if ($str != '' && common::config_item('permitted_uri_chars') != '' && c

ommon::config_item('enable_query_strings') == FALSE)  104.         {  105.             if ( ! preg_match("|^[".str_replace(array('\-', '-'), '-', preg_quo

te(common::config_item('permitted_uri_chars'), '-'))."]+$|i", $str))  106.             {  107.                 show_error('The URI you submitted has disallowed characters.', 

400);  108.             }  109.         }  110.         $bad    = array('$',         '(',         ')',       '%28',    '%29');  111.         $good   = array('$',    '(',    ')',    '(',   ')');  112.   113.         return str_replace($bad, $good, $str);  114.     }  115.     public function _remove_url_suffix()  116.     {  117.         if  (common::config_item('url_suffix') != "")  118.         {  119.             $this->uri_string = preg_replace

("|".preg_quote(config_item('url_suffix'))."$|", "", $this->uri_string);  120.         }  121.     }  122.     public function _explode_segments()  123.     {  124.         foreach(explode("/", preg_replace("|/*(.+?)/*$|", "", $this-

>uri_string)) as $val)  125.         {  126.              $val = trim($this->_filter_uri($val));  127.               128.             if ($val != '')  129.             {  130.                 $this->segments[] = $val;  131.             }  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 27: Tutorial Membangun Sistem Core.docx

132.         }  133.     }  134.       135.     public function _reindex_segments()  136.     {  137.         array_unshift($this->segments, NULL);  138.         array_unshift($this->rsegments, NULL);  139.         unset($this->segments[0]);  140.         unset($this->rsegments[0]);  141.     }      142.     public function segment($n, $no_result = FALSE)  143.     {  144.         return ( ! isset($this->segments[$n])) ? $no_result : $this-

>segments[$n];  145.     }  146.     public function rsegment($n, $no_result = FALSE)  147.     {  148.         return ( ! isset($this->rsegments[$n])) ? $no_result : $this-

>rsegments[$n];  149.     }  150.     public function uri_to_assoc($n = 3, $default = array())  151.     {  152.          return $this->_uri_to_assoc($n, $default, 'segment');  153.     }  154.     public function ruri_to_assoc($n = 3, $default = array())  155.     {  156.          return $this->_uri_to_assoc($n, $default, 'rsegment');  157.     }  158.     public function _uri_to_assoc($n = 3, $default = array(), $which = 'segment

')  159.     {  160.         if ($which == 'segment')  161.         {  162.             $total_segments = 'total_segments';  163.             $segment_array = 'segment_array';  164.         }  165.         else  166.         {  167.             $total_segments = 'total_rsegments';  168.             $segment_array = 'rsegment_array';  169.         }  170.           171.         if ( ! is_numeric($n))  172.         {  173.             return $default;  174.         }  175.       176.         if (isset($this->keyval[$n]))  177.         {  178.             return $this->keyval[$n];  179.         }  180.       181.         if ($this->$total_segments() < $n)  182.         {  183.             if (count($default) == 0)  184.             {  185.                 return array();  186.             }  187.               188.             $retval = array();  189.             foreach ($default as $val)  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 28: Tutorial Membangun Sistem Core.docx

190.             {  191.                 $retval[$val] = FALSE;  192.             }          193.             return $retval;  194.         }  195.   196.         $segments = array_slice($this->$segment_array(), ($n - 1));  197.   198.         $i = 0;  199.         $lastval = '';  200.         $retval  = array();  201.         foreach ($segments as $seg)  202.         {  203.             if ($i % 2)  204.             {  205.                 $retval[$lastval] = $seg;  206.             }  207.             else  208.             {  209.                 $retval[$seg] = FALSE;  210.                 $lastval = $seg;  211.             }  212.           213.             $i++;  214.         }  215.   216.         if (count($default) > 0)  217.         {  218.             foreach ($default as $val)  219.             {  220.                 if ( ! array_key_exists($val, $retval))  221.                 {  222.                     $retval[$val] = FALSE;  223.                 }  224.             }  225.         }  226.         $this->keyval[$n] = $retval;  227.         return $retval;  228.     }  229.     public function assoc_to_uri($array)  230.     {      231.         $temp = array();  232.         foreach ((array)$array as $key => $val)  233.         {  234.             $temp[] = $key;  235.             $temp[] = $val;  236.         }  237.           238.         return implode('/', $temp);  239.     }  240.     public function slash_segment($n, $where = 'trailing')  241.     {  242.         return $this->_slash_segment($n, $where, 'segment');  243.     }  244.     public function slash_rsegment($n, $where = 'trailing')  245.     {  246.         return $this->_slash_segment($n, $where, 'rsegment');  247.     }  248.   249.     public function _slash_segment($n, $where = 'trailing', $which = 'segment') 

 

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 29: Tutorial Membangun Sistem Core.docx

250.     {      251.         if ($where == 'trailing')  252.         {  253.             $trailing    = '/';  254.             $leading    = '';  255.         }  256.         elseif ($where == 'leading')  257.         {  258.             $leading    = '/';  259.             $trailing    = '';  260.         }  261.         else  262.         {  263.             $leading    = '/';  264.             $trailing    = '/';  265.         }  266.         return $leading.$this->$which($n).$trailing;  267.     }  268.   269.     public function segment_array()  270.     {  271.         return $this->segments;  272.     }  273.   274.     public function rsegment_array()  275.     {  276.         return $this->rsegments;  277.     }  278.   279.     public function total_segments()  280.     {  281.         return count($this->segments);  282.     }  283.   284.     public function total_rsegments()  285.     {  286.         return count($this->rsegments);  287.     }  288.   289.     public function uri_string()  290.     {  291.         return $this->uri_string;  292.     }  293.   294.   295.     public function ruri_string()  296.     {  297.         return '/'.implode('/', $this->rsegment_array()).'/';  298.     }  299.   300.   301. }  302. ?>  

Sedangkan source code library Route ada dibawah ini

view plain print ?

1. <?php defined('SYS') or exit('Access Denied!');  2. class Router {  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 30: Tutorial Membangun Sistem Core.docx

3.       4.     public $config;      5.     public $routes              = array();  6.     public $error_routes        = array();  7.     public $class               = '';  8.     public $method              = 'index';  9.     public $directory           = '';  10.     public $uri_protocol        = 'auto';  11.     public $default_controller;  12.     public $query_string        = FALSE; // Obullo  1.0 changes  13.       14.     public function __construct()  15.     {  16.         //$routes = get_config('routes');   // Obullo changes..  17.     //print_r($routes);  18.           19.     require(APP. 'config'.DS.'routes'. PHP_EXT);  20.         $this->routes = ( ! isset($routes) OR ! is_array($routes)) ? array() : $route

s;  21.     //print_r($this->routes);  22.         unset($routes);  23.           24.         $this->method = $this->routes['index_method'];  25.         $this->uri    = common::register('Uri');  26.         $this->_set_routing();          27.                   28.         //log_message('debug', "Router Class Initialized");  29.     }  30.       31.     private function _set_routing()  32.     {  33.         if (common::config_item('enable_query_strings') === TRUE AND isset

($_GET[config_item('controller_trigger')]))  34.         {  35.             $this->query_string = TRUE;  36.           37.             $this->set_directory(trim($this->uri-

>_filter_uri($_GET[config_item('directory_trigger')])));  38.             $this->set_class(trim($this->uri-

>_filter_uri($_GET[config_item('controller_trigger')])));  39.   40.             if (isset($_GET[config_item('function_trigger')]))  41.             {  42.                 $this->set_method(trim($this->uri-

>_filter_uri($_GET[config_item('function_trigger')])));   43.             }  44.               45.             return;  46.         }  47.   48.         $this->default_controller = ( ! isset($this->routes['default_controller']) OR 

$this->routes['default_controller'] == '') ? FALSE : strtolower($this->routes['default_controller']);      

49.           50.         $this->uri->_fetch_uri_string();  51.           52.         if ($this->uri->uri_string == '')  53.         {  54.             if ($this->default_controller === FALSE)  55.             {  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 31: Tutorial Membangun Sistem Core.docx

56.                 throw new Exception("Unable to determine what should be displayed. A default route has not been specified in the routing file.");  

57.             }  58.   59.             $segments = $this->_validate_request(explode('/', $this-

>default_controller));   60.             $this->set_class($segments[1]);  61.             $this->set_method($this->routes['index_method']);  // index  62.             $this->uri->rsegments = $segments;  63.             $this->uri->_reindex_segments();  64.               65.             //log_message('debug', "No URI present. Default controller set.");  66.             return;  67.         }  68.         unset($this->routes['default_controller']);  69.           70.         $this->uri->_remove_url_suffix();  71.         $this->uri->_explode_segments();  72.         $this->_parse_routes();          73.         $this->uri->_reindex_segments();  74.     }  75.     private function _set_request($segments = array())  76.     {     77.         $segments = $this->_validate_request($segments);  78.           79.         if (count($segments) == 0)  80.         return;  81.                           82.         $this->set_class($segments[1]);  83.           84.         if (isset($segments[2]))  85.         {  86.                 $this->set_method($segments[2]);     87.         }  88.         else  89.         {  90.             $segments[2] = $this->routes['index_method'];  91.         }  92.         $this->uri->rsegments = $segments;  93.     }  94.     private function _validate_request($segments)  95.     {  96.         if( ! isset($segments[0]) ) $segments[0] = '';  97.         if( ! isset($segments[1]) ) $segments[1] = '';  98.         if (is_dir(DIR.$segments[0]))  99.         {    100.             $this->set_directory($segments[0]);  101.               102.             if( ! emptyempty($segments[1]))   103.             {  104.                 if (file_exists(DIR.$segments[0].DS.'controllers'.DS.

$segments[1].PHP_EXT))  105.                 return $segments;    106.             }  107.   108.         }  109.   110.         show_404($segments[0].' / '.$segments[1]);  111.     echo 'Error '.$segments[0].' / '.$segments[1];  112.     }  113.     private function _parse_routes()  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 32: Tutorial Membangun Sistem Core.docx

114.     {  115.         if (count($this->routes) == 1)  116.         {               117.             $this->_set_request($this->uri->segments);  118.             return;  119.         }  120.   121.         $uri = implode('/', $this->uri->segments);  122.   123.         if (isset($this->routes[$uri]))  124.         {  125.             $this->_set_request(explode('/', $this->routes[$uri]));          126.             return;  127.         }  128.                   129.         foreach ($this->routes as $key => $val)  130.         {                          131.             $key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $ke

y));  132.               133.             if (preg_match('#^'.$key.'$#', $uri))  134.             {              135.                 if (strpos($val, '$') !== FALSE AND strpos($key, '(') !== FALSE

)  136.                 {  137.                     $val = preg_replace('#^'.$key.'$#', $val, $uri);  138.                 }  139.               140.                 $this->_set_request(explode('/', $val));          141.                 return;  142.             }  143.         }  144.         $this->_set_request($this->uri->segments);  145.     }  146.   147.     public function set_class($class)  148.     {  149.         $this->class = $class;  150.     }  151.     public function fetch_class()  152.     {  153.         return $this->class;  154.     }  155.     public function set_method($method)  156.     {  157.         $this->method = $method;  158.     }  159.   160.     public function fetch_method()  161.     {  162.         if ($this->method == $this->fetch_class())  163.         {  164.             return $this->routes['index_method'];  165.         }  166.   167.         return $this->method;  168.     }  169.     public function set_directory($dir)  170.     {  171.         $this->directory = $dir.'';  172.     }  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 33: Tutorial Membangun Sistem Core.docx

173.     public function fetch_directory()  174.     {  175.         return $this->directory;  176.     }  177.   178. }  179. ?>  

2. Output Library

Sesuai dengan namanya, library ini berfungsi untuk menangani output hasil proses. Apa yang di-

ouputkan oleh library ini? yang di-ouputkan berupa script HTML, CSS ataupun Javascript yang berasal

dari keseluruhan proses. Anda tentunya paham kalau browser itu kenalnya hanya script HTML HTML,

CSS ataupun Javascript. Browser tidak akan pernah mengenal PHP dan memang akan sangat lucu

sekali kalau browser mengenal script PHP :D. Padahal kenyataannya keseluruhan hasil proses tersebut

tentunya ada serangkaian script PHP yang dijalankan oleh server dan script PHP tersebut dikompilasi

untuk menhasilkan HTML. Untuk selanjutnya si HTML itulah yang akan dikirim ke browser. Nah petugas

yang disuruh mengirimkan HTML itulah yang akan menangi pengiriman HTML tadi. Pertanyaannya

Kenapa kok perlu library output? apa nggak boleh kalau tidak pake jasa si den mas Output tadi? Nah ini

dia salah satu fasilitas yang ada di framework ini. Fasilitas apakah gerangan? Fasilitas itu dinamakan

cache. Anda tahu cache itu apa dan untuk apa? cache itu berfungsi untuk menyimpan data-data yang

pernah diakses oleh pengguna yang tersimpan pada folder temporary (sementara) dan fungsinya ketika

ada pengguna lain yang mengakses data yang sama maka serangkaian proses yang dilakukan oleh PHP

dan Database tidak perlu lagi dikerjakan. Pengguna tadi cukup dilayani dari data yang sudah ada dalam

cache tersebut. Source library output tersebut terlihat seperti dibawah iniview plain print ?

1. <?php defined('SYS') or exit('Access Denied!');  2. class Output {  3.     public $final_output;  4.     public $cache_expiration    = 0;  5.     public $headers             = array();  6.     public $enable_profiler     = FALSE;  7.     public $parse_exec_vars     = TRUE;      8.   9.     public function __construct()  10.     {  11.         //log_message('debug', "Output Class Initialized");  12.     }  13.     14.     public function get_output()  15.     {  16.         return $this->final_output;  17.     }  18.     public function set_output($output)  19.     {  20.         $this->final_output = $output;  21.     }  22.   23.     public function append_output($output)  24.     {  25.         if ($this->final_output == '')  26.         {  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 34: Tutorial Membangun Sistem Core.docx

27.             $this->final_output = $output;  28.         }  29.         else  30.         {  31.             $this->final_output .= $output;  32.         }  33.     }  34.   35.     public function set_header($header, $replace = TRUE)  36.     {  37.         $this->headers[] = array($header, $replace);  38.     }  39.    40.     public function set_status_header($code = 200, $text = '')  41.     {  42.         set_status_header($code, $text);  43.     }  44.     45.     public function enable_profiler($val = TRUE)  46.     {  47.         exit('Profiler Class Not Implemented Yet ! Use this->db->last_query() for now.

');  48.           49.         $this->enable_profiler = (is_bool($val)) ? $val : TRUE;  50.     }  51.     public function cache($time)  52.     {  53.         $this->cache_expiration = ( ! is_numeric($time)) ? 0 : $time;  54.     }  55.     public function _display($output = '')  56.     {      57.         if ($output == '')  58.         {  59.             $output =& $this->final_output;  60.         }  61.         if ($this->cache_expiration > 0)  62.         {  63.             $this->_write_cache($output);  64.         }  65.         $elapsed = common::register('Benchmark')-

>elapsed_time('total_execution_time_start', 'total_execution_time_end');          66.         $output  = str_replace('0.0182', $elapsed, $output);  67.     $memory  = ( ! function_exists('memory_get_usage')) ? '0' : roun

d(memory_get_usage()/1024/1024, 2).' MB';  68.     $output = str_replace('1.77 MB', $memory, $output);  69.         /*         70.         if ($this->parse_exec_vars === TRUE) 71.         { 72.             $memory = ( ! function_exists('memory_get_usage')) ? '0' : round(memory_ge

t_usage()/1024/1024, 2).'MB'; 73.             $output = str_replace('0.0182', $elapsed, $output); 74.             $output = str_replace('1.77 MB', $memory, $output); 75.         }        76.     */  77.         // --------------------------------------------------------------------  78.           79.         // Is compression requested?  80.         /*if (common::config_item('compress_output', 'cache') === TRUE) 81.         { 82.             if (extension_loaded('zlib')) 83.             {              

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 35: Tutorial Membangun Sistem Core.docx

84.                 if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) AND strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE) 

85.                 {   // Obullo changes ..  86.                     ini_set('zlib.output_compression_level', config_item('compression_

level', 'cache'));   87.                     ob_start('ob_gzhandler'); 88.                 } 89.             } 90.         } 91.     */  92.         if (count($this->headers) > 0)  93.         {  94.             foreach ($this->headers as $header)  95.             {  96.                 @header($header[0], $header[1]);  97.             }  98.         }          99.         if ( ! function_exists('this'))  100.         {  101.             echo $output;  102.             //log_message('debug', "Final output sent to browser");  103.             //log_message('debug', "Total execution time: ".$elapsed);  104.             return TRUE;  105.         }  106.         if ($this->enable_profiler == TRUE)  107.         {  108.             $profiler = base::register('Profiler');                  109.             if (preg_match("|</body>.*?</html>|is", $output))  110.             {  111.                 $output  = preg_replace("|</body>.*?</html>|is", '', $output);  112.                 $output .= $profiler->run();  113.                 $output .= '</body></html>';  114.             }  115.             else  116.             {  117.                 $output .= $profiler->run();  118.             }  119.         }  120.         $ob = base::getInstance();  121.           122.         if (method_exists($ob, '_output'))  123.         {  124.             $ob->_output($output);  125.         }  126.         else  127.         {  128.             echo $output;  // Send it to the browser!  129.         }  130.           131.         //log_message('debug', "Final output sent to browser");  132.         //log_message('debug', "Total execution time: " . $elapsed);          133.     }  134.     public function _write_cache($output)  135.     {  136.         $OB = base::getInstance();   137.           138.         //$path = common::config_item('cache_path', 'cache');  139.       140.         $cache_path = APP.'cache'.DS; //= ($path == '') ?  APP.'system'.DS.'cac

he'.DS : $path;  141.           

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 36: Tutorial Membangun Sistem Core.docx

142.         if ( ! is_dir($cache_path) OR ! common::is_really_writable($cache_path))  

143.         {  144.         throw new Exception('Unable to write cache file: '.$cache_path);        

      145.         return;  146.         }  147.           148.         $uri =  $OB->config->item('base_url').$OB->config->item('index_page').

$OB->uri->uri_string();  149.         $cache_path .= md5($uri);  150.   151.         if ( ! $fp = @fopen($cache_path, FOPEN_WRITE_CREATE_DESTRUCTIVE))//

FOPEN_WRITE_CREATE_DESTRUCTIVE))  152.         {  153.         throw new Exception('Unable to write cache file: '.$cache_path);  154.             return;  155.         }  156.         $expire = time() + ($this->cache_expiration * 60);  157.           158.         if (flock($fp, LOCK_EX))  159.         {  160.             fwrite($fp, $expire.'TS--->'.$output);  161.             flock($fp, LOCK_UN);  162.         }  163.         else  164.         {  165.         throw new Exception('Unable to secure a file lock for file at: '.

$cache_path);    166.             return;  167.         }  168.         fclose($fp);  169.         @chmod($cache_path, DIR_WRITE_MODE);  170.   171.         //log_message('debug', "Cache file written: ".$cache_path);  172.     }  173.     public function _display_cache(&$URI)  174.     {  175.         //$cache_path = (common::config_item('cache_path', 'cache') == '') ? AP

P.'system'.DS.'cache'.DS : common::config_item('cache_path', 'cache');  176.         $cache_path =  APP.'cache'.DS;  177.         // Build the file path.  The file name is an MD5 hash of the full URI  178.         $uri =  common::config_item('base_url').  179.     common::config_item('index_page').$URI->uri_string;  180.            181.         $filepath = $cache_path . md5($uri);  182.         183.         if ( ! @file_exists($filepath))  184.         {  185.         return FALSE;  186.         }  187.       188.         if ( ! $fp = @fopen($filepath, "r"))  189.         {  190.                 return FALSE;  191.         }  192.              193.         flock($fp, LOCK_SH);  194.           195.         $cache = '';  196.         if (filesize($filepath) > 0)  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 37: Tutorial Membangun Sistem Core.docx

197.         {  198.             $cache = fread($fp, filesize($filepath));  199.         }  200.       201.         flock($fp, LOCK_UN);  202.         fclose($fp);  203.                       204.         // Strip out the embedded timestamp          205.         if ( ! preg_match("/(d+TS--->)/", $cache, $match))  206.         {  207.             return FALSE;  208.         }  209.           210.         // Has the file expired? If so we'll delete it.  211.         if (time() >= trim(str_replace('TS--->', '', $match['1'])))  212.         {           213.             if (common::is_really_writable($cache_path))  214.             {  215.                 @unlink($filepath);  216.                 //log_message('debug', "Cache file has expired. File deleted"); 

 217.                 return FALSE;  218.             }  219.         }  220.   221.         // Display the cache  222.         $this->_display(str_replace($match['0'], '', $cache));  223.         //log_message('debug', "Cache file is current. Sending it to browser.")

;  224.         return TRUE;  225.     }  226. }//end class  227. ?>  

3. Config Library

Library config atau singkatan dari configuration berfungsi untuk membaca konfigurasi sistem. Pada

umumnya library ini berfungsi untuk membaca konfigurasi sistem yang ada pada folder application/config

Source code library Config ini ada dibawah ini

view plain print ?

1. <?php defined('SYS') or exit('Access Denied!');  2. class Config {  3.     public $config    = array();  4.     public $is_loaded = array();  5.   6.     public function __construct()  7.     {  8.         $this->config = common::get_config();  9.     }  10.         11.     public function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)  12.     {  13.         $file = ($file == '') ? 'config' : str_replace(EXT, '', $file);  14.       15.         if (in_array($file, $this->is_loaded, TRUE))  16.         {  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 38: Tutorial Membangun Sistem Core.docx

17.             return TRUE;  18.         }  19.   20.         if ( ! file_exists(APP .'config'. DS .$file. EXT))  21.         {  22.             if ($fail_gracefully === TRUE)  23.             {  24.                 return FALSE;  25.             }  26.               27.             throw new Exception('The configuration file '.$file. '.PHP does not exist.

');  28.         }  29.       30.         include(APP .'config'. DS .$file. EXT);  31.   32.         if ( ! isset($config) OR ! is_array($config))  33.         {  34.             if ($fail_gracefully === TRUE)  35.             {  36.                 return FALSE;  37.             }  38.               39.             throw new Exception('Your '.$file. '.PHP file does not appear to contain a 

valid configuration array.');  40.         }  41.   42.         if ($use_sections === TRUE)  43.         {  44.             if (isset($this->config[$file]))  45.             {  46.                 $this->config[$file] = array_merge($this->config[$file], $config);  47.             }  48.             else  49.             {  50.                 $this->config[$file] = $config;  51.             }  52.         }  53.         else  54.         {  55.             $this->config = array_merge($this->config, $config);  56.         }  57.   58.         $this->is_loaded[] = $file;  59.         unset($config);  60.   61.         //log_message('debug', 'Config file loaded: config/'.$file.EXT);  62.         return TRUE;  63.     }  64.         65.     public function item($item, $index = '')  66.     {      67.         if ($index == '')  68.         {      69.             if ( ! isset($this->config[$item]))  70.             {  71.                 return FALSE;  72.             }  73.   74.             $pref = $this->config[$item];  75.         }  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 39: Tutorial Membangun Sistem Core.docx

76.         else  77.         {  78.             if ( ! isset($this->config[$index]))  79.             {  80.                 return FALSE;  81.             }  82.   83.             if ( ! isset($this->config[$index][$item]))  84.             {  85.                 return FALSE;  86.             }  87.   88.             $pref = $this->config[$index][$item];  89.         }  90.   91.         return $pref;  92.     }  93.     public function slash_item($item)  94.     {  95.         if ( ! isset($this->config[$item]))  96.         {  97.             return FALSE;  98.         }  99.   100.         $pref = $this->config[$item];  101.   102.         if ($pref != '' && substr($pref, -1) != '/')  103.         {      104.             $pref .= '/';  105.         }  106.   107.         return $pref;  108.     }  109.     public function site_url($uri = '')  110.     {  111.         if (is_array($uri))  112.         {  113.             $uri = implode('/', $uri);  114.         }  115.   116.         if ($uri == '')  117.         {  118.             return $this->slash_item('base_url').$this->item('index_page');  119.         }  120.         else  121.         {  122.             $suffix = ($this->item('url_suffix') == FALSE) ? '' : $this-

>item('url_suffix');  123.             return $this->slash_item('base_url').$this-

>slash_item('index_page').preg_replace("|^/*(.+?)/*$|", "", $uri).$suffix;  124.         }  125.     }  126.     public function set_item($item, $value)  127.     {  128.         $this->config[$item] = $value;  129.     }  130.   131. }  132.   133. ?>  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 40: Tutorial Membangun Sistem Core.docx

4. Benchmark

Benchmark ini seperti dibilang penting juga

penting dibilang tidak perlu digunakan juga tidak ada masalah. Library ini hanya berfungsi untuk

menghitung waktu komputasi berapa lama waktu si server untuk melayani sebuah permintaan dan

berapa Mega Byte memory yang dibutuhkan oleh si server untuk melayani permintaan tersebut. Pada

website blogkomputer.com, waktu komputasi dan kebutuhan resource memory bisa anda lihat pada

footer yang gambarnya terlihat seperti disamping ini. Sedangkan source code dari library benchmark ini

bisa anda lihat dibawah ini.

view plain print ?

1. <?php  defined('SYS') or exit('Access Denied!');  2. class Benchmark {  3.   4.     var $marker = array();  5.     function mark($name)  6.     {  7.         $this->marker[$name] = microtime();  8.     }  9.     function elapsed_time($point1 = '', $point2 = '', $decimals = 4)  10.     {  11.         if ($point1 == '')  12.         {  13.             return '0.0182';  14.         }  15.   16.         if ( ! isset($this->marker[$point1]))  17.         {  18.             return '';  19.         }  20.   21.         if ( ! isset($this->marker[$point2]))  22.         {  23.             $this->marker[$point2] = microtime();  24.         }  25.       26.         list($sm, $ss) = explode(' ', $this->marker[$point1]);  27.         list($em, $es) = explode(' ', $this->marker[$point2]);  28.   29.         return number_format(($em + $es) - ($sm + $ss), $decimals);  30.     }  31.     function memory_usage()  32.     {  33.         return '1.77 MB';  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 41: Tutorial Membangun Sistem Core.docx

34.     }  35.   36. }  37. ?>  

Sampai disini artikel tentang pembuatan library utama (core) ini selesai kita bahas. Ingat  secara default

kelima library ini akan terus menerus dipanggil oleh sistem. Oleh karena itu selain sistem core dan sistem

database, kelima library ini wajib ada dalam framework kita.

Tole : Lho..kok hanya 4 library pakdhe? kan kurang satu padahal sampean kan bilang 5 to?

Pakdhe : Iya nomornya sengaja pakdhe bikin sampe 4 saja tole, trus yang satunya lagi

mana? lha itu coba sampean lihat pembahasan sub bab 1. Kan pakdhe tulis Uri dan

Routing. Itu sengaja dua library tapi pakdhe bahas jadi satu :)

Tole : ealah...tau gitu kenapa nggak dibikin jadi dua sub bab saja pakdhe?

Pakdhe : memang sengaja kok pakdhe tulis gitu..biasalah kan pakdhe suka iseng, makanya

kalo sampean bingung kan berarti pakdhe jadi tambah puas..puas..puas...:))

Tole : o...dasar semprul..sontoloyo...

Tutorial Membangun Sistem Helper

Helper itu apa sih? Pembaca sering naik bis atau angkot atau kendaraan umum yang lain? biasanya

kalau ada orang yang kerjaan teriak-teriak di sebelahnya sopir itu namanya helper atau kalau lidah orang

Indonesia menyebutnya kenek.

Dalam framework kira-kira fungsi helper kurang lebih seperti yang sudah saya sebutkan diatas. Hanya

saja bedanya kalau kenek itu wujudnya manusia kalau helper dalam framework itu bentuknya function.

Jadi si den bagus Helper itu berfungsi sebagai alat bantu jikalau dibutuhkan oleh sang programmer.

Tole : Halah...belum-belum pakdhe ini sudah bikin bingung orang. Mbokyao tu nde poin

gitu kalo menjelaskan sesuatu itu...pakek istilah kenek..sopir..apa itu maksudnya? emang

becak sampean ada keneknya to?

Pakdhe : ya itu kan sekedar ilustrasi saja Tole...dan korban contohnya pak Sopir dan om

Kenek haha...Seperti biasa kalo tole tambah bingung kan pakdhe jadi tambah

puasss...puasss..puasss..hahahaiii...

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 42: Tutorial Membangun Sistem Core.docx

Tole : ooo...blaiiik..blaiik...bener-bener sotoloyo sampean itu pakdhe. Awas yo sekali lagi

sampean bikin bingung saya, ntar lama-lama sampean tak jual kiloan lho. Emang sampean

mau kalau sampean tak jual ke tukang rosokan besi tua? huehehe...

OK. to the point saja, ayo mari monggo alias kita mulai bahas apa dan bagaimana keberadaan kedua

helper tersebut.

1. View Helper

View helper, sesuai dengan namanya adalah berupa

fungsi yang bertugas untuk memanggil dan menampilkan View. Anda sudah paham view? view itu ya

template (script) HTML anda. Ingat, konsep MVC adalah Model View Controller..masih ingat kan? apa

fungsinya Model? dan apa fungsinya Controller? kalau anda lupa, coba anda baca lagi di artikel saya

yang pertama (Tutorial Membangun Sistem Core).

Pada framework becak ini aturan main penempatan view terlihat seperti gambar disamping. Aturan-

aturannya seperti berikut ini :

1. Jika template HTML disimpan pada folder application/views maka template tersebut adalah view utama, atau induk

HTML pada keseluruhan aplikasi (Lihat gambar nomor 1, lingkaran merah)

2. Jika template HTML disimpan pada folder application/directories/[nama apliksi]   /views  maka template tersebut

adalah sub view, atau sub bagian view dari view utama( Lihat gambar nomor 2, lingkaranan hijau)

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 43: Tutorial Membangun Sistem Core.docx

Lho kenapa kok ada banyak view? bukannya kalau hanya ada satu view seperti CodeIgniter akan jauh

lebih sederhana? Sudah saya singgung pada pembahasan terdahulu bahwa framework ini mendukung

banyak aplikasi dalam satu framework. Ini artinya apa? dalam satu framework diijinkan pula terdapat

banyak view. Ada banyak pilihan dalam hal ini. Pilihannya apa saja?

Pilihan pertama:  pada masing-masing aplikasi website pada folder di application/directories, diijinkan

mempunyai tampilan (view) sendiri-sendiri dan antara view aplikasi satu dengan yang lain tidak saling

berkaitan. ini artinya view yang ada seharusnya sejumlah aplikasi yang ada.

Pilihan yang kedua: sangat dimungkinkan keseluruhan aplikasi mempunyai template induk tampilan

yang sama. Misalnya saya ambil studi kasus begini, ada sebuah Universitas X yang memiliki 5 Fakultas,

dimana masing-masing fakultas mempunyai aplikasi website sendiri-sendiri. Akan tetapi ada syarat

tambahan, misalnya Pak Rektor menginginkan tampilan website antar fakultas tersebut seragam dan

hanya content-nya saja yang berubah disesuaikan dengan informasi dari fakultasya. Nah kalau kita

menemui kasus seperti ini, maka lebih baik kita sediakan satu buah template yang diletakkan di folder

application/views dan nantinya sub view ini akan disisipkan pada view utama.

OK. Gini sajalah..daripada tambah bingung, sudahlah ini saya copy-paste source-codenya dulu saja ya..

view plainprint?

1. <?php defined('SYS') or exit('Access Denied!');  2. /*  3. * Becak MVC Framework version 1.0  4. *  5. * File      : view_helper.php 6. * Directory : system/helpers 7. * Author    : Eko Heri Susanto 8. * Description   : fungsi untuk memuat (loaded) view atau user interface   9. */  10. function app_view($view_name, $arr_data = array(), $return_string=false){  11.     $file = APP . 'views'. DS . $view_name . PHP_EXT;  12.     return _view($file, $arr_data, $return_string);  13. }//end view  14.   15. function view($view_name, $arr_data = array(), $return_string=true){  16.     $file = DIR.$GLOBALS['d'] .DS. 'views'. DS . $view_name . PHP_EXT;  17.     return _view($file, $arr_data, $return_string);  18. }  19.   20. function app_script($filename, $data = '') {     21.     return _script(APP .'scripts'. DS, $filename, $data);  22. }  23.   24. function script($filename, $data = '') {     25.     return _script(DIR .$GLOBALS['d']. DS .'scripts'. DS, $filename, $data);  26. }  27.   28. function _view($file, $arr_data = array(), $return_string){  29.     if (!file_exists($file)) throw new Exception("Can't load template file: " . $fil

e);   30.   31.     if(sizeof($arr_data) > 0) extract($arr_data, EXTR_SKIP);  32.     ob_start();  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 44: Tutorial Membangun Sistem Core.docx

33.     include ($file);  34.     if($return_string){  35.         $content = ob_get_contents();  36.         @ob_end_clean();  37.         return $content;  38.     }  39.     common::register('Output')->append_output(ob_get_contents());  40.     @ob_end_clean();  41.         return;  42. }  43. function _script($path, $filename, $data = '')  44. {  45.     if( emptyempty($data) ) $data = array();  46.       47.     if ( ! file_exists($path . $filename . PHP_EXT) )  48.     {  49.         throw new Exception('Unable locate the script file: '. $path . $filename . PHP

_EXT);  50.     }   51.       52.     if(sizeof($data) > 0) { extract($data, EXTR_SKIP); }  53.       54.     ob_start();  55.       56.     include($path . $filename . PHP_EXT);  57.     $content = ob_get_contents();  58.       59.     ob_end_clean();  60.     return "  61. ".$content;   62. }  63. ?>  

2. Head_Tag Helper

Bagi anda yang sudah terbiasa dengan script HTML, pastinya anda sudah tidak asing dengan istilah

head tag bukan? head itu artinya kepala, dan tag artinya tanda pengenal. Jadi kalau diartikan secara

keseluruhan head tag adalah tanda pengenal di kepala. Jadi bagi anda yang tambah bingung setelah

membaca artikel ini, saya sarankan untuk memasang tanda pengenal di kepala anda sendiri-sendiri.

Caranya bagaimana? coba anda buat tulisan yang besar-besar di kertas karton, bunyi tulisannya begini

"TOLONG, SAYA SEDANG BINGUNG".  Jika sudah selesai bikin tulisan, maka kertas karton tadi anda

bentuk sedemikian rupa sehingga menyerupai topi. Selanjutnya saya sangat menyarankan pakai topi tadi

untuk jalan-jalan ke pasar atau ke mall sambil berdoa mudah-mudahan ada orang lain yang bersedia

menolong anda. Good luck, selamat mencoba :D

Kalau di HTML yang dimaksud head tag itu adalah tanda pengenal seperti misalnya meta keyword,

description, author ataupun mungkin style, script dan lain sebagainya. head tag ini pada umumnya

dituliskan pada bagian head pada script HTML anda. Oleh karena itu tanda-tanda pengenal ini

dinamakan head tag.

Fungsi dari helper head_tag itu sendiri sebenarnya hanyalah untuk menyederhanakan penulisan head

tag agar pengembang aplikasi website tidak capek-capek lagi ngetik script head tag yang panjang lebar,

sepanjang dan selebar jembatan Suramadu. Source codenya bisa anda lihat dibawah ini

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 45: Tutorial Membangun Sistem Core.docx

view plainprint?

1. <?php defined('SYS') or exit('Access Denied!');  2. function css($filename, $path = 'css', $title = '', $media = '')  3. {  4.     if( ! is_array($filename))  5.     $filename = array($filename);  6.       7.     /*$_cont = base::getInstance(); 8.      9.     if(isset($_cont->_ent->css_folder{1})) 10.     { 11.         $path = $path . $_cont->_ent->css_folder;  12.     }*/  13.   14.     $url = base::getInstance()->config->slash_item('source_url').'css';  15.       16.     $style = '';  17.     foreach($filename as $key => $css)  18.     {      19.         $style .= "  20. ".link_tag($url.'/'.$css, 'stylesheet', 'text/css', $title, $media);  21.     }  22.       23.     return $style;     24. }  25. function js($filename, $arguments = '', $type = 'text/javascript')  26. {  27.     if( ! is_array($filename))  28.     $filename = array($filename);  29.       30.     $url = base::getInstance()->config->slash_item('source_url').'js/';  31.   32.     $js = '';  33.     foreach($filename as $key => $file)  34.     {  35.         $js.= "  36. ".'<script type="'.$type.'" src="'.$url.$file.'" '.$arguments.'></script>';    37.     }  38.       39.     return $js;  40. }  41. function meta($name = '', $content = '', $type = 'name', $newline = "  42. ")  43. {  44.     if ( ! is_array($name))  45.     {  46.         $name = array(array('name' => $name, 'content' => $content, 'type' => $type, '

newline' => $newline));  47.     }  48.     else  49.     {  50.         // Turn single array into multidimensional  51.         if (isset($name['name']))  52.         {  53.             $name = array($name);  54.         }  55.     }  56.   57.     $str = '';  58.     foreach ($name as $meta)  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 46: Tutorial Membangun Sistem Core.docx

59.     {  60.         $type       = ( ! isset($meta['type']) OR $meta['type'] == 'name') ? 'name' : 

'http-equiv';  61.         $name       = ( ! isset($meta['name']))     ? ''     : $meta['name'];  62.         $content    = ( ! isset($meta['content']))    ? ''     : $meta['content'];  63.         $newline    = ( ! isset($meta['newline']))    ? "  64. "    : $meta['newline'];  65.   66.         $str .= '<meta '.$type.'="'.$name.'" content="'.$content.'" />'.$newline;  67.     }  68.   69.     return $str;  70. }  71. function link_tag($href = '', $rel = 'stylesheet', $type = 'text/css', $title = '', $m

edia = '', $index_page = FALSE)  72. {  73.     $OB = base::getInstance();  74.   75.     $link = '<link ';  76.   77.     if (is_array($href))  78.     {  79.         foreach ($href as $k=>$v)  80.         {  81.             if ($k == 'href' AND strpos($v, '://') === FALSE)  82.             {  83.                 if ($index_page === TRUE)  84.                 {  85.                     $link .= ' href="'.$OB->config->site_url($v).'" ';  86.                 }  87.                 else  88.                 {  89.                     $link .= ' href="'.$OB->config->slash_item('base_url').$v.'" ';  90.                 }  91.             }  92.             else  93.             {  94.                 $link .= "$k="$v" ";  95.             }  96.         }  97.   98.         $link .= "/>";  99.     }  100.     else  101.     {  102.         if ( strpos($href, '://') !== FALSE)  103.         {  104.             $link .= ' href="'.$href.'" ';  105.         }  106.         elseif ($index_page === TRUE)  107.         {  108.             $link .= ' href="'.$OB->config->site_url($href).'" ';  109.         }  110.         else  111.         {  112.             $link .= ' href="'.$OB->config->slash_item('base_url').$href.'" ';  113.         }  114.   115.         $link .= 'rel="'.$rel.'" type="'.$type.'" ';  116.   117.         if ($media    != '')  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 47: Tutorial Membangun Sistem Core.docx

118.         {  119.             $link .= 'media="'.$media.'" ';  120.         }  121.   122.         if ($title    != '')  123.         {  124.             $link .= 'title="'.$title.'" ';  125.         }  126.   127.         $link .= '/>';  128.     }  129.       130.     return $link;  131. }  132. ?>  

Pertanyaan terakhir, helper ini cara manggilnya gimana? coba anda buka lagi class Global Controller

pada artikel Tutorial Membangun Sistem Core. Untuk lebih jelasnya lihat gambar dibawah ini.

Perintah loader::sys_helper("view") dan loader::sys_helper("head_tag")  seperti yang terlihat pada

lingkaran nomor 1 (warna hijau) inilah yang menandai proses pemanggilan helper view dan head_tag.

Kemudian setelah helper tersebut dipanggil, bagaimana cara mengeksekusi fungsi-fungsinya?

untuk menampilkan meta content-type dan author dapat anda lihat pada lingkaran nomor 2 (warna

merah) pada gambar diatas. Sedangkan pemanggilan head tag javascript dan CSS bisa anda lihat pada

gambar dibawah lingkaran nomor 1 (warna merah). Pemanggilan sub view bisa anda lihat pada gambar

dibawah lingkaran nomor 2 (warna hijau). Sedangkan pemanggilan view utama dapat dilihat pada

lingkaran nomor 3 (warna kuning)

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 48: Tutorial Membangun Sistem Core.docx

Sampai disini penulisan artikel helper inti (utama) sudah selesai. Sekali lagi kalau anda tambah bingung

maka saya merasa sangat puass...puass..puass!!!. Ini artinya apa? semakin anda merasa bingung,

berarti semakin besar keinginan anda untuk belajar. Dan semakin besar keinginan anda untuk belajar

maka anda semakin pintar.

Uji Coba Becak HMVC Framework

Setelah berhari-hari, berbulan-bulan dan bertahun-tahun kita berkutat dengan cara pembuatan framework

MVC, sekarang sudah saatnya kita menguji coba framework yang baru saja kita bikin kemarin. Tentunya

seluruh pembaca yang baik hati dan tidak sombong, sudah memahami apa itu sistem inti (core), sistem

database, sistem library dan sistem helper yang sudah saya bahas pada artikel saya tempo hari. Untuk

saat ini kita coba berkutat pada Sistem Application. Anda masih ingat kan? apa itu sistem application?

sistem aplication adalah aplikasi web site yang dikembangkan oleh developer website. Jadi pekerjaan

utama anda sebagai pengembang website, yang memanfaatkan framework becak made in Pakdhe

Sakiyun ini...ya diletakkan di sistem application ini.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 49: Tutorial Membangun Sistem Core.docx

Susunan folder sistem aplikasi ini dapat

anda lihat pada gambar disamping kanan ini. Coba kita bahas satu persatu

1. Configuration. Dapat anda lihat letak konfigurasi berada pada folder application/config. Disitu terdapat

3 file konfigurasi yaitu config.php, database.php dan routes.php. Lihat lingkaran nomor 1 (warna merah).

Apa dan bagaimana konfigurasi tersebut? nanti akan saya jelaskan di sub bab 1 pada artikel ini.

2. Global Controller. Global Controller sudah saya terangkan di artikel saya yang pertama (membangun

sistem core). Lokasi global controller ini berapa pada folder application/globals. Lihat lingkaran nomor 2

(warna kuning). Global controller ini akan kembali saya ulas pada sub bab 2 pada artikel ini.

3. View Base. View base adalah tampilan dasar dari aplikasi web site kita. Dengan adanya view base ini

maka semua aplikasi tampilannya bisa kita standarisasikan. Lokasi view base ini terletak pada folder

application/views. Lihat lingkaran nomor 3 (warna hijau). Nantinya akan saya jelaskan lebih lanjut pada

sub bab 3 pada artikel ini.

4. Aplikasi kita. Sudah saya jelaskan sebelumnya bahwa secara garis besar aplikasi yang kita buat

terdiri dari tiga bagian utama yaitu controller, view dan model. lokasi aplikasi kita ini terletak pada

folder application/directories. Pada contoh uji coba kali ini sengaja saya membuat folder welcome (Lihat

lingkaran nomor 4, warna hijau). Untuk selanjutnya aplikasi yang kita buat nantinya dinamakan welcome,

sesuai dengan nama folder aplikasinya. Nah didalam folder welcome itulah nantinya kita bisa menyimpan

aplikasi controller, model dan view. Selain ketiga bagian tersebut (controller, model, view) dalam aplikasi

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 50: Tutorial Membangun Sistem Core.docx

tersebut bisa juga kita tambahkan scripts (untuk menyimpan program-program javascript) dan helpers

(untuk menyimpan aplikasi helper buatan kita sendiri/yang tidak disediakan oleh framework). Bagaimana

pembuatan controller, view dan script akan saya jelaskan lebih lanjut pada sub bab 4.1, sub bab 4.2 dan

sub bab 4.3 pada artikel ini.

Selain keempat bagian utama tersebut, kadangkala

dalam membangun sebuah website kita membutuhkan sources tambahan. Misalkan CSS (Cascade Style

Sheet), JS (javascript), gambar (image), jenis-jenis huruf (font) dan lain sebagainya. Oleh karena itu

sources (kebutuhan) tambahan tersebut dalam framework ini telah diorganisir pada folder sources.

Untuk lebih jelasnya lihat gambar disamping kiri.

Dalam folder source ini, terdapat 3 sub folder yaitu css, images dan js. Nantinya kebutuhan tambahan

yang sudah saya jelaskan diatas akan disimpan dalam folder-folder ini(lihat lingkaran warna merah).

dapat anda lihat folder css berisi file-file untuk pengaturan tampilan website kita atau yang lebih dikenal

dengan nama Cascade Style Sheet (CSS). Sedangkan pada folder js berisi file-file program javascript.

Program javascript yang ada di folder ini nantinya berbeda dengan program javascript yang

dideklarasikan pada folder application/directories/welcome/scripts diatas. Perbedaannya dimana?

nanti di sub bab ke 5 akan saya jelaskan lebih lanjut serta saya sertakan contoh source code-nya.

Jika anda membutuhkan jenis tulisan (font) khusus, maka bisa saja menambahkan folder font pada

sources tersebut.

Tole Dulkamit : "Pakdhe..pakdhe, tak lihat sepintas cara memanfaatkan framework

sampean ini kok rumit ya? apa karena HMVC itu ya pakdhe?"

Pakdhe Sakiyun : "Sebenarnya tidak rumit Tole. Terlihat rumit itu kan karena kita belum

terbiasa. Nanti kalo sudah terbiasa kan malah kerasa lebih terstruktur programnya. Dan

tentu saja kita akan lebih mudah dalam proses pembuatan dan perawatan aplikasi

kita..Tole.

Tole Dulkamit : "O..gitu ya pakdhe, coba dulu saya simak dongengan pakdhe Sakiyun dulu

deh kalo begitu"

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 51: Tutorial Membangun Sistem Core.docx

OK. Kita mulai dengan Konfigurasi dulu. Konfigurasi ini sangat sepele tapi kalo kita lupa kadang bikin

puyeng hehe...

1. Konfigurasi(Config)

1.1 config.php

Config.php ini berisi konfigurasi url dasar (base_url), url source (source_url), pengaturan nama page

index dan lain sebagainya. Untuk lebih jelasnya source code-nya bisa anda copy-paste dibawah ini. Dan

jangan lupa disimpan pada folder application/config seperti yang sudah saya jelaskan diatas.  view plain print ?

1. <?php  2. defined('SYS') or exit('Access Denied!');  3. /*  4. Isi 0 atau 1. Jika sudah online ganti dengan 0 5. */  6. $config['display_errors']        = 1;   7. /** 8. | @see  http://php.net/manual/en/function.date-default-timezone-set.php 9. | @link http://www.php.net/manual/en/timezones.php 10. */  11. $config['timezone_set']          = 'Asia/Jakarta';  12.   13. $config['base_url']              = 'http'.((isset($_SERVER['HTTPS']) && $_SERVE

R['HTTPS'] == 'on') ? 's' : '').'://'.$_SERVER['HTTP_HOST'].str_replace('//','/',dirname($_SERVER['SCRIPT_NAME']).'/');  

14. $config['source_url']            = $config['base_url']."/sources/";  15. $config['index_page']            = "index.php";  16. $config['uri_protocol']          = "AUTO";  17. $config['url_suffix']            = "";  18. $config['language']              = "english";  19. $config['charset']               = "UTF-8";  20. $config['subclass_prefix']       = 'MY_';  21. $config['permitted_uri_chars']   = 'a-z 0-9~%.:_-';  22. $config['enable_query_strings']  = FALSE;  23. $config['directory_trigger']     = 'd';     24. $config['controller_trigger']    = 'c';  25. $config['function_trigger']      = 'm';  26. $config['log_threshold']         = 0;  27. $config['log_path']              = '';  28. $config['log_date_format']       = 'Y-m-d H:i:s';  29. $config['encryption_key']        = "";  30. $config['sess_cookie_name']      = 'becak_session';  31. $config['sess_expiration']       = 7200;  32. $config['sess_encrypt_cookie']   = FALSE;  33. $config['sess_driver']           = 'cookie';  // or database  34. $config['sess_db_var']           = 'db';              35. $config['sess_table_name']       = 'becak_sessions';  36. $config['sess_match_ip']         = FALSE;  37. $config['sess_match_useragent']  = TRUE;  38. $config['sess_time_to_update']   = 300;  39. $config['cookie_prefix']         = "";  40. $config['cookie_domain']         = "";  41. $config['cookie_path']           = "/";  42. $config['cookie_time']           = (7 * 24 * 60 * 60);  43. $config['global_xss_filtering']  = FALSE;  44. $config['time_reference']        = 'local';  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 52: Tutorial Membangun Sistem Core.docx

45. $config['proxy_ips']             = '';  46. ?>  

1.2 routes.php

Routes.php ini berfungsi untuk mengatur mana aplikasi default yang akan tampil ketika pengunjung

website kita mengetikkan alamat URL website kita tanpa ada parameter apapun (misalnya

:http://blogkomputer.com). Seperti sudah saya jelaskan diartikel sebelumnya, framework ini mendukung

banyak aplikasi. Akan tetapi ketika ada pengunjung yang mengakses halaman depan (page index) maka

tentunya hanya ada 1 (satu) aplikasi default yang akan dijalankan. Konfigurasi routes.php ini terlihat

seperti contoh dibawah ini.

view plain print ?

1. <?php   2. defined('SYS') or exit('Access Denied!');   3. $routes['default_controller']    = "welcome/page";     4. $routes['index_method']          = "index";  5. ?>  

2. global_controller.php

Sudah saya singgung di bagian awal artikel (membangun sistem core) bahwa global controller berisi

deklarasi variable atau konstanta yang bersifat umum (general). Source dari global controller ini bisa

anda lihat dibawah ini. Jangan lupa copy-kan file global_controller.php ini ke

folder application/globals.view plain print ?

1. <?php  defined('SYS') or exit('Access Denied!');  2. class global_controller extends base {  3.     public $base, $base_url, $base_img;  4.         public $title, $head, $meta;  5.     public function  __construct(){  6.         parent::__construct();  7.         loader::sys_helper('view');  8.         loader::sys_helper('head_tag');  9.         $this->base     = common::config_item('base_url');  10.         $this->base_url = common::config_item('base_url')  . common::config_item

('index_page');  11.         $this->base_img = common::config_item('source_url').'images/';  12.         $this->meta     = meta('Content-type', 'text/html; charset=utf-8', 'equiv');  13.         $this->meta    .= meta('author', 'Eko Heri Susanto');  14.     }  15. }  16. ?>  

3. base view

Berikut ini adalah source code HTML yang merupakan view dasar (base view) dari keseluruhan aplikasi

website kita. Pembuatan view dasar ini sebenarnya tidak diwajibkan. Hanya saja jika kita pengembang

website membutuhkan tampilan yang bersifat umum dan standar, maka pemanfaatan view dasar ini

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 53: Tutorial Membangun Sistem Core.docx

sangat dibutuhkan. Jangan lupa copy-paste di filder application/views dan simpan dengan nama

view_base.php

view plain print ?

1. <html>  2. <head>  3. <?php echo this()->meta; ?>  4.   5. <title><?php echo this()->title; ?></title>  6.   7. <base href="<?php echo this()->base; ?>" />  8.   9. <?php   10. this()->head .= css('welcome.css');  11. echo this()->head;  12. ?>  13.   14. </head>  15.   16. <body>  17. <h1>Welcome to Becak MVC Framework</h1>  18. <?php echo this()->body; ?>  19.   20. <p>Page rendered in {elapsed_time} seconds using {memory_usage} of memory</p>  21. </body>  22.   23. </html>  

4. Application

4.1 Controller

Inilah source sederhana controller kita. Jangan lupa copy-paste ke

folder application/directories/welcome/controllers, simpan dengan nama file page.php.view plain print ?

1. <?php defined('SYS') or exit('Access Denied!');   2. class page extends controller {  3.     function __construct(){  4.         parent::__construct();  5.     }  6.     function index(){  7.         $this->title = 'Welcome to Becak MVC Framework !';  8.         $this->meta .= meta('keywords', 'becak, php5, framework');     9.         $this->head .= css('welcome.js');    10.         $this->head .= script('welcome');  11.           12.         $data['var'] = 'This page generated by Becak MVC Framework.';  13.           14.         $this->body  = view('view_welcome', $data);  15.   16.         app_view('view_base');  17.     }  18. }  19. ?>  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 54: Tutorial Membangun Sistem Core.docx

4.2 View

Sedangkan source code tampilan (view) kita terlihat seperti dibawah ini. Jangan lupa copy-paste ke

folder application/directories/welcome/views, simpan dengan nama file view_welcome.php.view plain print ?

1. <p><?php echo $var;?></p>  2.   3.   4. <p></p>  5.   6. <p>If you would like to edit this page you'll find <b>View</b> located at:</p>  7. <code>application/directories/welcome/views/view_welcome.php</code>  8.   9. <p>The corresponding <b>Controller</b> for this page is found at:</p>  10. <code>application/directories/welcome/controllers/page.php</code>  11.   12. <p>The corresponding <b>Global controller</b> for this page is found at:</p>  13. <code>application/globals/global_controller.php</code>  14.   15. <code>  16. <input type="button" onclick="test_me();" value="Script Test !"/>  17. </code>  18.   19. <p>The corresponding <b>Script</b> file for this page is found at:</p>  20. <code>application/directories/welcome/scripts/welcome.php</code>  21.   22. <p>The corresponding <b>Global View</b> file for this page is found at:</p>  23. <code>application/views/view_base.php</code>  

4.3 Script 

Sebagai tambahan, ini juga saya contohkan bagaimana membuat javascript sederhana. Dimana

javascript ini tersimpan dalam folder application/directories/welcome/scripts dengan nama

filewelcome.php.view plain print ?

1. <script type="text/javascript" language="Javascript">  2.   3.     // We load inline javascript files as views  4.     // we will build it in <head> tags  5.       6.     function test_me()  7.     {  8.         alert('Hello World ! This is the my site base url <?php echo this()->base; ?> 

');  9.         return false;  10.     }  11.       12.   13. </script>  

5 Sources

5.1 css

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 55: Tutorial Membangun Sistem Core.docx

Nah..ini dia yang terakhir kita akan buat CSS untuk mempermanis tampilan website kita. Jangan lupa file

css ini disimpan dalam folder sources/css dengan nama file welcome.cssview plain print ?

1. * {  2.     margin: 0px;  3.     padding: 0px;  4. }  5.   6. html, body {  7.     height: 100%;   8.     font-family: arial;  9. }  10.     11.   12. body {  13.  background-color: #fff;  14.  margin: 40px;  15.  font-family: Arial;  16.  font-size: 14px;  17.  color: #000;  18. }  19.   20. a {  21.  color: #003399;  22.  background-color: transparent;  23.  font-weight: normal;  24. }  25.   26. h1 {  27.  color: #808080;  28.  background-color: transparent;  29.  border-bottom: 1px solid #D0D0D0;  30.  font-size: 25px;  31.  font-weight: bold;  32.  margin: 24px 0 2px 0;  33.  padding: 5px 0 6px 0;  34. }  35.   36. code {  37.  font-family: Monaco, Verdana, Sans-serif;  38.  font-size: 14px;  39.  background-color: #f9f9f9;  40.  border: 1px dotted #D0D0D0;  41.  color: #969696;  42.  display: block;  43.  margin: 14px 0 14px 0;  44.  padding: 12px 10px 12px 10px;  45.  font-weight: bold;  46. }  

Sampai disini serangkaian pembuatan aplikasi uji coba sudah selesai kita kerjakan. Nah ini dia tampilan

hasil akhir hasil uji coba tersebut.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 56: Tutorial Membangun Sistem Core.docx

Tole Dulkamit : "Pakdhe..pakdhe, kok cuman sampe disini? lah..sampean itu nggak tuntas

kalo ngasih dongengan"

Pakdhe Sakiyun : "Lho...bentar-bentar..yang kurang mana to Tole?"

Tole Dulkamit :"Lha yang uji coba database mana? trus yang nerangin cara bikin script di

sources/js mana? kok nanggung gini to pakdhe?"

Pakdhe Sakiyun : "Sebentar Tole, sekarang kan banyak hutan-hutan yang gundul.

Akbibatnya apa? PLTA banyak yang tidak fungsi..makanya Pakdhe harus irit listrik :-D"

Tole Dulkamit : "Halah..sampean ini terlalu banyak alasan, bilang aja males ngetik..."

Pakdhe Sakiyun : "Sabar ya Tole, nanti malam kalo pikiran pakdhe lagi fresh, coba tak

bikin buku tamu sederhana. Dan ini sudah memanfaatkan database Tole..jadi sabar ya?

hehe..."

Tole Dulkamit :"O..gitu..tak tunggu lho janjimu Pakdhe..sampek nggak ditulis,

awas...jangan salahkan saya kalau ada batu bata melayang dan

mengenai bathuksampean...huehehe...becanda pakdhe.."

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 57: Tutorial Membangun Sistem Core.docx

Pakdhe Sakiyun : "Beras..eheheh..beyes..eheheh..becak...eheheh..beres...wani

piro??...hehe"

Uji Coba Sistem Database Becak HMVC FrameworkSesuai dengan janji Pakdhe Sakiyun tempo hari yaitu menguji coba sistem database, maka pada artikel

kali ini akan kita bahas bagaimana membuat aplikasi buku tamu (guestbook) sederhana,  memanfaatkan

operasi database klasik dan PDO (PHP Data Object), yang telah tersedia dalam framework becak.

Aplikasi guestbook kita kali ini dilengkapi dengan fasilitas menampilkan data, menambah data, merubah

serta menghapus data yang sudah pernah tersimpan di database. Jadi secara keseluruhan 4 operasi

dasar database yaitu : SELECT, INSERT, UPDATE dan DELETE akan diuji cobakan. 

Tole : "Pakdhe..pakdhe, kok ada database klasik segala to?"

Pakdhe : "Itu istilah pakdhe aja, gak perlu bingung ya..soalnya kan saat ini den bagus PHP

menyediakan beberapa cara untuk koneksi dan mengoperasikan database. Dari dulu

sebenarnya PHP sudah menyediakan teknik pengoperasian database dan sampai saat ini

masih banyak yang menggunakan. Teknik ini sengaja pakdhe kasih nama klasik karena

sudah ada dari jaman dulu kala. Nah sekarang, si PHP menyediakan juga teknik

pengoperasian database yang full Object Oriented Pogramming (OOP) dan selanjutnya

dinamakan PDO"

Tole :"Trus pas nanti kita bikin program apakah ada perbedaan antara database klasik dan

PDO pakdhe?

Pakdhe :"Tenang saja, khusus untuk framework ini antara yang klasik dan PDO tadi, sudah

pakdhe bungkus secara rapi sehingga para pengguna framework ini tidak merasakan

perbedaan tata cara pengorasian database-nya Tole..Biar tidak penasaran, coba dengarkan

dongengan pakdhe dulu ya.."

To nde poin saja ya, pertama-tama (herannya kok tidak ada kosa kata "terakhir-akhir" ya? he..he..), yang

harus kita persiapkan tentunya adalah database-nya. Silahkan buka aja phpmyadmin via browser anda,

kemudian buat database baru dengan nama coba. Kira-kira proses pembuatan database ini terlihat

seperti gambar dibawah ini

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 58: Tutorial Membangun Sistem Core.docx

Selanjutnya lengkapi database yang barusan kita buat tadi dengan table-nya. Coba silahkan bikin table

dengan nama guestbook, seperti terlihat pada script dibawah ini :

view plain print ?

1. CREATE TABLE IF NOT EXISTS `guestbook` (  2.   `id` int(11) NOT NULL AUTO_INCREMENT,  3.   `nama` varchar(50) NOT NULL,  4.   `email` varchar(50) NOT NULL,  5.   `isi` text NOT NULL,  6.   `tgl_posting` datetime NOT NULL,  7.   PRIMARY KEY (`id`)  8. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;  

Nah..sampai disini proses

pembuatan database-nya sudah rebes...eeh..beres...selanjutnya mari kita obrak-abrik programnya.

Seperti biasa saya bahas dulu susunan folder aplikasinya biar pembaca yang budiman tidak bingung.

Sebenarnya tata cara pembuatan folder aplikasi guestbook ini sama saja dengan aplikasi uji coba kita

tempo hari. Kalau dalam uji coba tempo hari kita bikin folder welcome dalam folder directories,

sekarang kita bikin folder bukutamu. Untuk lebih jelasnya lihat gambar disamping.

Sebelum lebih jauh ke pembuatan controller, model dan view, pertama kali yang harus kita kerjakan

adalah melakukan konfigurasi database. Coba anda perhatikan lingkaran nomor 1 warna merah pada

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 59: Tutorial Membangun Sistem Core.docx

gambar disamping. Konfigurasi ini mutlak harus kita kerjakan terlebih dahulu agar aplikasi kita dapat

terkoneksi ke database. Untuk uji coba yang pertama, kita manfaatkan dulu operasi database klasik nanti

kalau aplikasi sudah jadi kita akan uji coba operasi database dengan PDO.

Step by step pembuatan aplikasi akan saya bahas dibawah ini.

1. Konfigurasi Database Klasik

Silakan buka file database.php pada folder application/config. Atau kalau belum ada filenya, silahkan

dibuat terlebih dahulu. Kemudian copas script konfigurasi seperti dibawah ini.

Yang harus anda perhatikan pada konfigurasi ini adalah pada baris ke 11 (user), baris ke 14

(password) dan baris ke 17 (database). Pada baris ke 11 bisa anda rubah kalau anda menggunakan

user lain untuk koneksi ke mysql. Untuk contoh kali ini sengaja saya gunakan user default bawaan dari

mysql yaitu root. Jika mysql anda di-password jangan lupa masukkan password koneksi mysql pada baris

ke 14. Sedangkan baris ke-17 adalah nama database yang baru saja kita bikin diatas. Kalau tadi anda

tidak menamakan database-nya dengan nama coba, maka anda diwajibkan mengganti nama database

tadi sesuai dengan nama database yang anda buat.view plain print ?

1. <?php  2. $config = array();  3.   4. // jika ingin menggunakan PDO ubah mejadi 'mysql_pdo'  5. $config['db']['type']       = 'mysql';   6.   7. // jika anda menggunakan PDO, ubah menjadi '127.0.0.1'  8. $config['db']['server']     = 'localhost';   9.   10. //sesuaikan dengan user yang ada di database mysql anda  11. $config['db']['user']       = 'root';  12.   13. //sesuaikan dengan password mysql anda  14. $config['db']['password']   = '';  15.   16. //sesuaikan dengan nama database yang anda buat  17. $config['db']['database']   = 'coba';  18. ?>  

2. Aplikasi Buku Tamu

Seperti biasa, untuk membuat aplikasi yang perlu kita sediakan adalah Controller, Model dan View

terlebih dahulu. Struktur folder-nya bisa anda lihat pada gambar diatas. Satu per satu coba kita bahas

ya..

2.1 Controller

Controller kita kali ini sengaja dinamakan page. Oleh karena itu nama filenya juga page.php. Dalam

controller ini terdapat 5 fungsi yaitu:l

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 60: Tutorial Membangun Sistem Core.docx

1. __construct : adalah fungsi konstruktor yang berisi deklarasi perintah yang jalan otomatis ketika pertama kali aplikasi

dijalankan

2. index : adalah fungsi default yang akan menampilkan data dan tampilan awal dari aplikasi

3. edit : adalah fungsi yang bertugas menampilkan data yang akan di-edit/dirubah

4. simpan : adalah fungsi yang menangani penyimpanan data, baik itu data baru ataupun data lama yang akan

diubah/update

5. hapus : adalah fungsi yang menangani penghapusan data dari database

Adapun script controller page tersebut terlihat seperti dibawah ini

view plain print ?

1. <?php defined('SYS') or exit('Access Denied!');  2. class page extends controller  3. {  4.     public function __construct()  5.     {  6.         parent::__construct();  7.         loader::model('guestbook_model');  8.     }  9.     public function index()  10.     {  11.         $this->output->cache(1);        12.         $data = array(  13.             'id' => '',  14.             'nama' => '',  15.             'email' => '',  16.             'isi' => '',  17.             'tgl_posting' => '',  18.             'status' => 'data_baru',  19.             'daftar_bukutamu' => $this->guestbook_model->GetData()  20.         );  21.         echo view("guestbook_view", $data, false);  22.     }  23.     function edit($id){  24.         $data_lama = $this->guestbook_model->GetData("WHERE id=$id");  25.         $temp = array();  26.         foreach($data_lama as $key => $val){  27.             $temp[$key] = $val;  28.         }  29.         $data = array(  30.             'id' => $id,  31.             'nama' => $temp[0]['nama'],  32.             'email' => $temp[0]['email'],  33.             'isi' => $temp[0]['isi'],  34.             'tgl_posting' => $temp[0]['tgl_posting'],  35.             'status' => 'edit',  36.             'daftar_bukutamu' => $this->guestbook_model->GetData()  37.         );  38.         echo view("guestbook_view", $data, false);  39.     }  40.     function simpan()  41.     {  42.         $id = isset($_POST['id']) ? $_POST['id'] : NULL;          43.         $nama = isset($_POST['nama']) ? $_POST['nama'] : '';  44.         $email = isset($_POST['email']) ? $_POST['email'] : '';  45.         $isi = isset($_POST['isi']) ? $_POST['isi'] : '';  46.         $status = isset($_POST['status']) ? $_POST['status'] : 'data_baru';  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 61: Tutorial Membangun Sistem Core.docx

47.           48.         $data = array(  49.             'id' => $id,  50.             'nama' => $nama,  51.             'email' => $email,  52.             'isi' => $isi,  53.             'tgl_posting' => date('Y-m-d H:i:s')  54.         );  55.         if($status == 'data_baru'){  56.             $result = $this->guestbook_model->InsertData($data);  57.             if($result==1) {  58.                 echo "<h2>Sukses Menambah Buku Tamu</h2>";  59.                 echo "<p><a href='".this()->base_url."/bukutamu/page'>Kembali ke halam

an depan</a></p>";  60.             }  61.         } else if($status == 'edit'){  62.             $result = $this->guestbook_model->UpdateData($data, array('id'=> $id));  63.             if($result==1) {  64.                 echo "<h2>Sukses Merubah Buku Tamunya $nama</h2>";  65.                 echo "<p><a href='".this()->base_url."/bukutamu/page'>Kembali ke halam

an depan</a></p>";  66.             }  67.         }//end if edit  68.           69.     }//end simpan  70.     function hapus($id){  71.         $result = $this->guestbook_model->DeleteData(array('id'=> $id));  72.         if($result==1) {  73.             echo "<h2>Sukses Menghapus Buku Tamu</h2>";  74.             echo "<p><a href='".this()->base_url."/bukutamu/page'>Kembali ke halaman d

epan</a></p>";  75.         }  76.     }  77. }  78. ?>  

2.2 Model

Sedangkan model kita kali ini dinamakan guestbook_model. Oleh karena itu nama file PHP nya sama

dengan nama kelasnya yaitu guestbook_model.php. Terdapat 5 fungsi dalam class model ini yaitu:

1. __construct : adalah konstruktor yang berisi deklarasi perintah untuk me-load sistem database. Sedangkan config

yang dibaca adalah db (konfigurasi "db" sudah saya bahas pada sub bab 1 diatas)

2. GetData : bertugas untuk meng-eksekusi perintah SELECT yang berfungsi untuk mengambil data dari database

3. InserData : bertugas meng-eksekusi perintah penyimpanan data baru(INSERT)

4. UpdateData : bertugas untuk mengeksekusi perintah perubahan (UPDATE) data

5. DeleteData : bertugas untuk mengeksekusi perintah penghapusan (DELETE) data

Adapun script model guestbook_model tersebut terlihat seperti dibawah ini

view plain print ?

1. <?php defined('SYS') or exit('Access Denied!');  2. class guestbook_model extends model {  3.     public function __construct(){  4.         loader::database("db");  5.     }  6.     function GetData($where=""){  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 62: Tutorial Membangun Sistem Core.docx

7.         $this->db->select("SELECT * FROM `guestbook` ".$where);  8.         return $this->db->fetch_array();  9.     }  10.     function InsertData($data){  11.         return $this->db->insert('guestbook', $data);  12.     }  13.     function UpdateData($data, $where){  14.         return $this->db->update('guestbook', $data, $where);  15.     }  16.     function DeleteData($where){  17.         return $this->db->delete('guestbook', $where);  18.     }  19. }  20. ?>  

2.3 View

Terakhir yang perlu kita bikin adalah tampilannya (view). View kita kali ini dinamakan

guestbook_view.php. Script lengkapnya seperti berikut ini.

view plain print ?

1. <html>  2. <head>  3. <title>Buku Tamu Sederhana</title>  4. </head>  5. <body>  6. <h2>Buku Tamu Sederhana</h2>  7. <h3>Isi Buku Tamu</h3>  8. <form method="POST" action="<?php echo this()->base_url;?>/bukutamu/page/simpan">  9. <p><input type="text" name="nama" size="40" value="<?php echo $nama;?>" /

><label>Nama</label></p>  10. <p><input type="text" name="email" size="40" value="<?php echo $email;?>" /

><label>Email</label></p>  11. <label>Isi</label>  12. <p><textarea name="isi" rows="5" cols="40"><?php echo $isi;?></textarea></p>  13. <input type="hidden" name ="id" value="<?php echo $id;?>" />  14. <input type="hidden" name ="status" value="<?php echo $status;?>" />  15. <p><input type="submit" value="simpan"></p>  16. </form>  17. <h3>Daftar Buku Tamu</h3>  18. <table border="1" width="100%" style="border-collapse:collapse;">  19. <tr>  20.     <th>ID</th>  21.     <th>Nama</th>  22.     <th>Email</th>  23.     <th>Isi</th>  24.     <th>Tgl Posting</th>  25.     <th>Operasi</th>  26. </tr>  27. <?php   28. foreach($daftar_bukutamu as $d) {  29. ?>  30. <tr>  31.     <td><?php echo $d['id'];?></td>  32.     <td><?php echo $d['nama'];?></td>  33.     <td><?php echo $d['email'];?></td>  34.     <td><?php echo $d['isi'];?></td>  35.     <td><?php echo $d['tgl_posting'];?></td>  36.     <td align="center">  

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 63: Tutorial Membangun Sistem Core.docx

37.     <a href="<?php echo this()->base_url.'/bukutamu/page/edit/'.$d['id'];?>">Edit</a> -   

38.     <a href="<?php echo this()->base_url.'/bukutamu/page/hapus/'.$d['id'];?>" onclick="return confirm('Anda yakin akan menghapus data ini?')">Hapus</a>  

39.     </td>  40. </tr>  41. <?php  42. }//end foreach  43. ?>  44. </table>  45. <p>Waktu komputasi 0.0163 detik. Kebutuhan memory 1.76 MB</p>  46. </body>  47. </html>  

Nah..sampai disini aplikasi sebagai bahan uji coba sedah selesai kita buat. Untuk menguji aplikasinya

jalan apa tidak coba anda ketik di URL browser seperti

ini : http://localhost/becak/index.php/bukutamu/page. Seharusnya kalau anda tidak salah ketik akan

muncul program seperti terlihat pada gambar dibawah ini.

Silahkan anda isi datanya, kemudian setelah terisi, data-data yang ada tersebut coba di-edit atau

dihapus. Jika tidak ada yang error berarti uji coba kita untuk mengoperasikan sistem database berhasil.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 64: Tutorial Membangun Sistem Core.docx

Tapi untuk uji coba operasi database PDO belum kita lakukan.O..iya sebelum saya lupa, khusus untuk

PDO ini ada catatan penting seperti dibawah ini.

Operasi databasePDO ini akan jalan jika modul PDO sudah terpasang/ter-install pada web service anda. Untuk mengetahui PDO-nya sudah terpasang apa belum coba gunakan fungsi phpinfo(). Hati-hati kalau anda masih menggunakan jasa web hosting. Tidak semua web hosting menyediakan modul PDO ini. Jika hosting anda belum memasang modul PDO jangan memaksakan diri menggunakan operasi database PDO, kecuali anda pingin nasibnya sama dengan pakdhe Sakiyun..hehe..

 Jika anda ingin menggunakan PDO, maka yang perlu anda lakukan hanya merubah konfigurasi

database saja. Merubahnya bagaimana? lihat script dibawah ini :

view plain print ?

1. <?php  2. $config = array();  3.   4. // jika ingin menggunakan klasik ubah mejadi 'mysql'  5. $config['db']['type']       = 'mysql_pdo';   6.   7. // jika anda menggunakan klasik, ubah menjadi 'localhost'  8. $config['db']['server']     = '127.0.0.1';   9.   10. //sesuaikan dengan user yang ada di database mysql anda  11. $config['db']['user']       = 'root';  12.   13. //sesuaikan dengan password mysql anda  14. $config['db']['password']   = '';  15.   16. //sesuaikan dengan nama database yang anda buat  17. $config['db']['database']   = 'coba';  18. ?>  

Nah, sekarang coba anda ukur waktu komputasi (lama proses eksekusi program). Dalam framework

sudah disediakan fasilitas untuk mengukur waktu komputasi dan besarnya memory yang dibutuhkan

untuk menjalankan aplikasi. Pada aplikasi ini fasilitas pengukur waktu komputasi dan kebutuhan resource

memory sudah terpasang. Coba anda lihat gambar hasil eksekusi program diatas. Di tulisan yang paling

bawah itu adalah pengukur waktu komputasi dan konsumsi memory. Menurut pakdhe Sakiyun antara

operasi klasik dan operasi PDO lebih cepat operasi klasik. Kalau para pembaca tidak/belum percaya

silahkan dicoba saja.

Sampai disini keseluruhan proses uji coba sudah selesai kita laksanakan. Tapi PR kita masih banyak.

Kita masih harus sering-sering menulis. Mudah-mudahan dalam tempoe jang sesingkat-singkatnya

pakdhe Sakiyun dapat ide baru lagi sehingga tulisan-tulisannya bisa dinikmati oleh para pembaca yang

budiman, baik hati dan tidak sombong :-D

Untuk mempercepat uji coba, silahkan download uji coba framework ini pada kolom download yang

sudah saya sediakan. Sekian, Semoga ada guna dan manfaatnya.

Regards,

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30

Page 65: Tutorial Membangun Sistem Core.docx

Tole Doelkamit

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30