Welcome to Abdul Malik Ikhsan's Blog

CodeIgniter modular with separating your own module and core CodeIgniter Application Framework

Posted in tips and tricks, Tutorial PHP by samsonasik on March 5, 2010

Cie, judulnya in English lagih, 😀 …
Langsung ajah yach (halah mulai dah alay, xi.xi.xi..), pada tulisan saya kali ini, saya akan membahas tentang codeIgniter modular dengan memisahkan module-module yang kita buat dan core CodeIgniter Application Framework. Pertama, yang harus kita tahu, codeIgniter mode clean-install tidak menyediakan sistem modular, hal ini tentu sangat membuat capek. Tentang pembandingan aplikasi modular dan tidak modular dapat di lihat di postingan saya yang sebelumnya untuk Zend Framework. Sebenarnya, kalau saya lihat, memang modular aplication membuat performa aplikasi menjadi sedikit lebih lambat, tapi tentu toh kita akan ambil resiko itu untuk sesuatu yang lebih menjanjikan, yaitu efisiensi dan keteraturan yang akan kita dapatkan nantinya.

Hal pertama, kita download dulu extension dari codeIgniter wiki : CodeIgniter modular extension ,  ( dokumentasi bisa dilihat di sini) , nah setelah kita download file .zip -nya, kita extract saja ke dalam folder system/application/libraries , setelah itu, let’s setting directory structure menjadi seperti ini :

Dari gambar di atas, terlihat saya membuat dua module, yaitu mod_default dan mod_sample.
Ok, kalau sudah, kita coba cut (CTRL + X) controllers, models, dan views di folder system/application kita (Jangan takut error !!!, namanya juga belajar kan 🙂 ).
Kalau sudah, kita coba cut (CTRL + X) file index.php yang ada di folder codeIgniter kita yang seharusnya sejajar dengan folder system ke dalam folder public yang baru saja kita buat. Setelah itu, kita edit file index.php kita tersebut di bagian SET THE SERVER PATH :

/*
|---------------------------------------------------------------
| SET THE SERVER PATH
|---------------------------------------------------------------
|
| Let's attempt to determine the full-server path to the "system"
| folder in order to reduce the possibility of path problems.
| Note: We only attempt this if the user hasn't specified a
| full server path.
|
*/
if (strpos($system_folder, '/') === FALSE)
{
 if (function_exists('realpath') AND @realpath(dirname(__FILE__)) !== FALSE)
 {
 $system_folder = realpath(dirname(__FILE__)).'/../'.$system_folder;
 }
}
else
{
 // Swap directory separators to Unix style for consistency
 $system_folder = str_replace("\\", "/", $system_folder);
}

Lihat pada bagian $system_folder = realpath(dirname(__FILE__)).’/../’.$system_folder; yang merujuk ke folder system yang sejajar folder public, karena require nya diambil dari folder public , jadi harus ambil ke dalam satu langkah ( cd ..) .

Setelah itu, kita edit file MY_Router.php (yang telah kita copy dari file compress tadi ke folder system/application/libraries).
ubah :

APPPATH.'modules/' => '../modules/',

menjadi :

APPPATH.'../../modules/' => '../../../modules/',

karena ceritanya kita akan meletakkan modules nya diluar folder system 🙂

Nah, setelah semua siap, kita boleh tambahin file .htaccess di folder public untuk meremove index.php dari URL yang kita akses.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Dengan syarat, kita aktifkan dulu module mod_rewrite dulu yang bisa kita aktifkan dengan meng-uncomment (hilangkan tanda ; ) di file httpd.conf di dalam folder web container kita ( xampp, appserv, etc)
;LoadModule rewrite_module modules/mod_rewrite.so
———
Ok, let’s setting the configuration :
Buka file routes.php dalam folder system/application/config :
ubah

$route['default_controller'] = "welcome";

menjadi

$route['default_controller'] = "mod_default/welcome";

Habis itu, buka file config.php dalam folder system/application/config :
ubah :

$config['base_url']    =  "http://www.example.com";

menjadi :

$config['base_url']    = "http://".$_SERVER['SERVER_NAME'].str_replace("index.php","",$_SERVER['SCRIPT_NAME']);

———
That’s all, sekarang kita coba buat contoh kasus panggil models dari module yang berbeda : kita buat file testmodel.php di dalam folder mod_sample/models (di dalam  module mod_sample , buat folder models).
berisi contoh berikut :

<?php

class Testmodel extends Model
{
 public function __construct()
 {
 parent::Model();
 }

 public function testfunc()
 {
 echo "this is test func from sample module";
 }
}

Setelah itu, coba deh kita panggil di controllers welcome di module mod_default,( kita tadi telah CUT controllers nya ke folder mod_default) seperti berikut :

<?php

class Welcome extends Controller
{
 function Welcome()
 {
 parent::Controller();
 }

 function index()
 {
 $this->load->model('mod_sample/Testmodel','tm');
 $this->tm->testfunc();
 }
}

/* End of file welcome.php */
/* Location: ./modules/mod_default/controllers/welcome.php */

———–

ok coy, sekarang kita coba panggil di browser :

Padahal kita panggil itu dari mod_default, kalau udah jalan , ya berarti udah berhasil :).

Referensi :
http://codeigniter.com/forums/
http://codeigniter.com/wiki/Modular_Extensions_-_HMVC/

8 Responses

Subscribe to comments with RSS.

  1. Haqqi said, on April 7, 2010 at 4:46 am

    Hm, jadi bingung nih. Mending Matchbox atau HMVC sih untuk aplikasi CI modular?

  2. samsonasik said, on April 7, 2010 at 9:22 am

    sama saja, keduanya bagus. 🙂

  3. haries said, on July 2, 2010 at 1:18 pm

    wah bagus nieh….
    aku dah lama nyari tutor2 kaya ginian…
    hmm..aplikasi yang udah jadi gak diupload ya….
    upload dunk…. biar bisa lebih enak blajarnya…
    mangstrab gan…rate ***** dech…

  4. danuttc@yahoo.com said, on February 5, 2011 at 8:45 am

    gimana mau upload aplikasinya ..wong web ini aja pake wordpress….

  5. digimonmasters said, on July 21, 2011 at 7:27 am

    eror bos..
    hmmmm…

    Warning: require_once(C:\wamp\www\172/../system/codeigniter/CodeIgniter.php) [function.require-once]: failed to open stream: No such file or directory in C:\wamp\www\172\index.php on line 115

    Fatal error: require_once() [function.require]: Failed opening required ‘C:\wamp\www\172/../system/codeigniter/CodeIgniter.php’ (include_path=’.;C:\php5\pear’) in C:\wamp\www\172\index.php on line 115

    saya pada bagian ini yg bingung soalnya make wamp server :

    Dengan syarat, kita aktifkan dulu module mod_rewrite dulu yang bisa kita aktifkan dengan meng-uncomment (hilangkan tanda ; ) di file httpd.conf di dalam folder web container kita ( xampp, appserv, etc)
    ;LoadModule rewrite_module modules/mod_rewrite.so

    sama ini nih :
    $config[‘base_url’]    = “http://”.$_SERVER[‘SERVER_NAME’].str_replace(“index.php”,””,$_SERVER[‘SCRIPT_NAME’]);

    SCRIPT_NAME diganti apaan ya??

  6. samsonasik said, on July 21, 2011 at 8:16 am

    coba di echo dulu di sebelum line 115 :

    echo $application_folder ;
    atau echo $system_folder; 

    cek dulu hasilnya seperti apa ?


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: