Kamis, 15 Desember 2016

CODEIGNITER HMVC MEMANGGIL FUNCTION DARI CONTROLLER LAINNYA

,
Melanjutkan postingan sebelumnya yang berjudul CODEIGNITER HMVC MEMBUAT TEMPLATE DENGAN BOOTSTRAP kali ini akan dibahas bagaimana memanggil function lainnya dari controller lain atau modul lain. Disini saya akan mencoba membuat function untuk menampilkan halaman template dan halaman content yang dapat diset dari function yang memanggil dengan tujuan agar tidak terlalu banyak membuat template. Pada postingan sebelumnya saya sudah membuat sebuah modul bernama template dimana digunakan untuk menampilkan template, dari modul itu saya kembangkan dengan menambahkan sebuah function bernama loadview, berikut script hasil pengembangannya
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Description of Dashboard
 * @author IMAM SYAIFULLOH
 */
class Template extends MX_Controller
{
    public function __construct()
    {
     parent::__construct();
    }

    public function index()
    {
     $data['title'] = 'Lesson HMVC Part 2';     
     $this->load->view('template_header',$data);     
     $this->load->view('template_content',$data);
     $this->load->view('template_footer',$data);
    }

    public function loadview($data=NULL,$page = NULL)
    {
        $this->load->view('template_header',$data);   
        if($page != NULL){
            $this->load->view($page,$data);
        } else {
           $this->load->view('template_content',$data);
        }
        $this->load->view('template_footer',$data);
    }
}
perlu diperhatikan agar suatu function dapat dipanggil dari controller lainnya kedua controller harus extends MX_Controller. Selanjutnya saya ingin membuat sebuah form login dengan template yang dipanggil di function loadview. Saya menambahkan function login pada controller dashboard (modul dashboard) dan didalamnya saya memanggil function loadview untuk menampilkan template. Dari function login diperlukan variabel $data dan $page dimana $page ini menyimpan content yang akan ditampilkan. Berikut hasil script yang dibuat.
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * Description of Dashboard
 * @author IMAM SYAIFULLOH
 */
class Dashboard extends MX_Controller
{
    public function __construct()
    {
   parent::__construct();
    }

    public function index(){
     $data['title'] = 'Lesson HMVC';
     $data['content'] = 'Hello World';
     $this->load->view('dashboard_index', $data, FALSE);
    }

    public function login($value='')
    {
     $data['title'] = 'Lesson HMVC';
        $data['content_title'] = 'Lesson HMVC Login';
     $page = 'dashboard/dashboard_login';
     echo modules::run('template/loadview', $data,$page);
    }
}
Selanjutnya saya buat sebuah view bernama dashboard_login yang disimpan di modul dashboard, berikut scriptnya
selanjutya saya coba memanggil halaman login tersebut dengan mengetikan http://localhost:8080/PROJECT/lesson/index.php/dashboard/login, berikut hasilnya
Lalu bagaiama jika kita ingin membuat sebuah function dimana funcion tersebut khusus untuk melakukan proses, misalnya saya ingin membuat proses perhitungan sederhana saya akan membuat sebuah modul baru bernama calculator yang digunakan untuk menampung function untuk melakukan proses, dan memanggil function tersebut di modul dashboard. Berikut script controller calculator
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * Description of Calculator
 * @author IMAM SYAIFULLOH
 */
class Calculator extends MX_Controller
{
 
 function __construct()
 {
  parent::__construct();
 }

 public function tambah($x = NULL,$y=NULL)
 {
  $result = NULL;
  if($x != NULL && $y != NULL){
   $result = $x+$y;
  }
  return $result;
 }
}
Pada controller dashboard saya menambahkan funtion tambah data untuk menampilkan hasil proses dari function tambah pada function calculator, berikut script di controller dashboard
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * Description of Dashboard
 * @author IMAM SYAIFULLOH
 */
class Dashboard extends MX_Controller
{
    public function __construct()
    {
   parent::__construct();
    }

    public function index(){
     $data['title'] = 'Lesson HMVC';
     $data['content'] = 'Hello World';
     $this->load->view('dashboard_index', $data, FALSE);
    }

    public function login($value='')
    {
     $data['title'] = 'Lesson HMVC';
        $data['content_title'] = 'Lesson HMVC Login';
     $page = 'dashboard/dashboard_login';
     echo modules::run('template/loadview', $data,$page);
    }

    public function tambahdata()
    {
        $x = 5;
        $y = 10;
        $this->load->module('calculator');
        $result = $this->calculator->tambah($x,$y);
        echo $x." + ".$y." = ".$result;
    }
}
maka kita dapat memanggil dibrowser dengan alamat http://localhost:8080/PROJECT/lesson/index.php/dashboard/tambahdata hasilnya
struktur folder akhir menjadi seperti berikut 
referensi https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc