Pada tutorial sebelumnya kita sudah membuat langkah awal dalam pembuatan Custom Views dan Template Helper dengan Codeigniter HMVC, selanjutnya kita akan membuat Master File dan Controller serta bagaimana agar HMVC module bekerja dengan template ini.

Custom Views dan Template Helper di Codeigniter HMVC – Bagian 1

Membuat Master File dan Controller File

  • Membuat master file di masing-masing folder template yang kita buat di theme_config.php
  • Membuat file Controller dan masing-masing controller mengarahkan ke tempate yang berbeada

Buat index.master.php dan tempatkan di dalam folder themes yang kita buat sesuai dengan theme_config.php

themes/
-------/admin/index.master.php
-------/front/index.master.php

Isi dari index.master.php

Sebagai contoh sederhana struktur index.master.php dapat dibuat seperti dibawah ini:

<!DOCTYPE html>

<html lang="en">
    <head></head>
    <body>
            <!-- Header -->
                 <!--  Untuk memanggil view kita dapat melakukan seperti ini -->
                 <?php echo $this->load->view($viewName) ?>
            <!-- Footer -->
      </body>
</html>

File Controller

Sekaran kita buat file controller untuk view diatas, mari kita rubah controller /core/application/welcome.php index() menjadi seperti ini :

$this->ci->data['fileName'] = "welcome_message.php";

// Without second parameter the view will load in front theme by default;
Theme::renderView($this->ci->data, parent::$front_theme);

HMVC (Hierarchical Model View Controller)

HMVC merupakan modular hirarki yang dapat di terapkan pada framework codeigniter, bagaimana caranya agar modular HMVC ini dapat bekerja dengan theme_helper yang kita buat ?

Download codeigniter-modular-extensions-hmvc Lalu ikuti petunjuk instalasinya :

/core/application/third_party/mx
/core/application/core/MY_Loader.php
/core/application/core/MY_Router.php

Tambahkan konfigurasi di config.php agar module dapat diakses dari luar /core

$config['modules_locations'] = array(
   APPPATH.'../../modules/' => '../../../modules/',
);

Membuat MY_Controller di /core/application/core/MY_Controller.php dengan meload MX Controller agar class ini dapat di extends di module HMVC.

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

/* load the MX_Router class */
require APPPATH . "third_party/MX/Controller.php";

class MY_Controller extends MX_Controller{

protected $ci;
protected static
   $front_theme = 'front',
   $admin_theme = 'admin';

   function__construct(){

      parent::__construct();
 
      $this->ci =&get_instance();

      /* Add Style Sample */
      //$this->ci->data['link_header'][] = Theme::addStyle("https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css");

      /* Add Script Sample */
      //$this->ci->data['link_header'][] = Theme::addScript("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js");
   }

}

/* End of file MY_Controller.php */
/* Location: ./application/core/MY_Controller.php */

Bila anda mengalami error seperti ini :

Message: Call to undefined method MY_Loader::_ci_object_to_array()

Maka edit file di /core/application/third_party/mx/Loader.php (Referensi)

di dalam fungsi public function view($view, $vars = array(), $return = FALSE){.... di Line (300)

/* Rubah Line Ini */
return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));

/* Menjadi seperti dibawah ini */
if (method_exists($this, '_ci_object_to_array')){
   return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
} else {
   return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_prepare_view_vars($vars), '_ci_return' => $return));
}

 

Selanjutnya anda tinggal membuat controller dan view didalam folder modules dan untuk merender tampilan anda tinggal memanggil fungsi Template::renderView($data, nama_template, hmvc_true);

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

class Hmvc extends MY_Controller {

   public function __construct(){
        parent::__construct();
   }

    public function index(){
        $this->ci->data['fileName'] = "welcome_hmvc";

        // Without second parameter the view will load in front theme by default;
        Theme::renderView($this->ci->data, parent::$front_theme , true);
    }
}

Oke sekian tutorial dari saya semoga bermanfaat dalam project-project website anda. Silahkan lihat preview dan download sourcecode ini di halaman preview.