Welcome Guest, Not a member yet? Register   Sign In
Make the program more correct
#1

Good day!
This is a simple view of my program. I have many controllers that look something like this

PHP Code:
class Home extends CI_Controller {
    private 
$data;
    public function 
__construct()
    {
        
parent::__construct();

        
$this->load->model('home_model');

        
$this->data['header'] = $this->home_model->GetDataHeader();
        
$this->data['footer'] = $this->home_model->GetDataFooter();
        
$this->data['body'] = $this->home_model->GetDataBody();
    }
    public function 
page1(){
        
$this->data['page'] = $this->home_model->GetDataPage(1);

        
$this->load->view('header',$this->data['header']);
        
$this->load->view('body',$this->data['body']);
        
$this->load->view('page1'$this->data['page']);
        
$this->load->view('footer',$this->data['footer']);
    }
    public function 
page2(){
        
$this->data['page'] = $this->home_model->GetDataPage(2);

        
$this->load->view('header',$this->data['header']);
        
$this->load->view('body',$this->data['body']);
        
$this->load->view('page2'$this->data['page']);
        
$this->load->view('footer',$this->data['footer']);
    }
    public function 
page3(){
        
$this->data['page'] = $this->home_model->GetDataPage(3);

        
$this->load->view('header',$this->data['header']);
        
$this->load->view('body',$this->data['body']);
        
$this->load->view('page3'$this->data['page']);
        
$this->load->view('footer',$this->data['footer']);
    }


I think this is not very good. And change to this
PHP Code:
class MY_Loader extends CI_Loader{
    public function 
__construct(){
        
parent::__construct();
    }

    public function 
my_load($name$vars = array())
    {
        
$this->view('header',$vars['header']);
        
$this->view('body',$vars['body']);
        
$this->view($name,$vars['page']);
        
$this->view('footer',$vars['footer']);
    }
}

class 
Home extends CI_Controller {
    private 
$data;
    public function 
__construct()
    {
        
parent::__construct();

        
$this->load->model('home_model');

        
$this->data['header'] = $this->home_model->GetDataHeader();
        
$this->data['footer'] = $this->home_model->GetDataFooter();
        
$this->data['body'] = $this->home_model->GetDataBody();
    }
    public function 
page1(){
        
$this->data['page'] = $this->home_model->GetDataPage(1);

        
$this->load->my_load('page1',$this->data);
    }
    public function 
page2(){
        
$this->data['page'] = $this->home_model->GetDataPage(2);

        
$this->load->my_load('page2',$this->data);
    }
    public function 
page3(){
        
$this->data['page'] = $this->home_model->GetDataPage(3);

        
$this->load->my_load('page3',$this->data);
    }


Now, if i change thing related with "load view", i will do it in one place, not in all functions of all controllers.

But if i change the data for the header or for the footer i will change each controller/ And i think this is not good.
How can I change the program to fix this situation?

Thank you
Reply
#2

(06-11-2017, 01:36 PM)Sarog Wrote: Good day!
This is a simple view of my program. I have many controllers that look something like this

PHP Code:
class Home extends CI_Controller {
    private 
$data;
    public function 
__construct()
    {
        
parent::__construct();

        
$this->load->model('home_model');

        
$this->data['header'] = $this->home_model->GetDataHeader();
        
$this->data['footer'] = $this->home_model->GetDataFooter();
        
$this->data['body'] = $this->home_model->GetDataBody();
    }
    public function 
page1(){
        
$this->data['page'] = $this->home_model->GetDataPage(1);

        
$this->load->view('header',$this->data['header']);
        
$this->load->view('body',$this->data['body']);
        
$this->load->view('page1'$this->data['page']);
        
$this->load->view('footer',$this->data['footer']);
    }
    public function 
page2(){
        
$this->data['page'] = $this->home_model->GetDataPage(2);

        
$this->load->view('header',$this->data['header']);
        
$this->load->view('body',$this->data['body']);
        
$this->load->view('page2'$this->data['page']);
        
$this->load->view('footer',$this->data['footer']);
    }
    public function 
page3(){
        
$this->data['page'] = $this->home_model->GetDataPage(3);

        
$this->load->view('header',$this->data['header']);
        
$this->load->view('body',$this->data['body']);
        
$this->load->view('page3'$this->data['page']);
        
$this->load->view('footer',$this->data['footer']);
    }


I think this is not very good. And change to this
PHP Code:
class MY_Loader extends CI_Loader{
    public function 
__construct(){
        
parent::__construct();
    }

    public function 
my_load($name$vars = array())
    {
        
$this->view('header',$vars['header']);
        
$this->view('body',$vars['body']);
        
$this->view($name,$vars['page']);
        
$this->view('footer',$vars['footer']);
    }
}

class 
Home extends CI_Controller {
    private 
$data;
    public function 
__construct()
    {
        
parent::__construct();

        
$this->load->model('home_model');

        
$this->data['header'] = $this->home_model->GetDataHeader();
        
$this->data['footer'] = $this->home_model->GetDataFooter();
        
$this->data['body'] = $this->home_model->GetDataBody();
    }
    public function 
page1(){
        
$this->data['page'] = $this->home_model->GetDataPage(1);

        
$this->load->my_load('page1',$this->data);
    }
    public function 
page2(){
        
$this->data['page'] = $this->home_model->GetDataPage(2);

        
$this->load->my_load('page2',$this->data);
    }
    public function 
page3(){
        
$this->data['page'] = $this->home_model->GetDataPage(3);

        
$this->load->my_load('page3',$this->data);
    }


Now, if i change thing related with "load view", i will do it in one place, not in all functions of all controllers.

But if i change the data for the header or for the footer i will change each controller/ And i think this is not good.
How can I change the program to fix this situation?

Thank you


Perhaps it can help: https://github.com/natanfelles/codeigniter-template
Reply




Theme © iAndrew 2016 - Forum software by © MyBB