-
Sarog
Newbie
-
Posts: 9
Threads: 7
Joined: Mar 2016
Reputation:
0
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
-
natanfelles
Member
-
Posts: 136
Threads: 24
Joined: Jan 2016
Reputation:
8
(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
|