CodeIgniter Dry Navigation

2019-09-08 03:43发布

问题:

My boss told me make dry navigation dont use repetitive code, for navigation i am trying to extend CI_Controler and with construct load header nav, body, footer files.

My question is when i create new controller and when i try to load different view files, how to achive that???

my extended controler

class MY_Controller extends CI_Controller
{
    public function __construct() {

        parent::__construct();
        $this->load->view('view_header');
        $this->load->view('includes/nav_home');
        $this->load->view('view_home');
        $this->load->view('view_footer');   

    }
}

and later when i am creating new controler how to load diffrent view files

class Pages extends MY_Controller
{
    public function __construct() {


        $this->load->view('includes/nav_new_view');
        $   

    }
}

回答1:

You can create a template library yourself. For example :

function template($view_name,$view_data){
    //below will return html string from view name
    $data['content'] = $this->load->view($view_name,$view_data,true)

    //load main template view and pass the html string to main template
    $this->load->view('main_template',$data);
}

In main template, just echo $content



回答2:

If I understand your question, you're trying to achieve a template situation. For this, the best way is to actually call your templates view files within a primary page view. What I mean is your controller function (not the constructor, an actual class function representing a page) should call a primary view such as

$this->load->view('page1', $this->data);

and within that file, you call

$this->load->view('nav', $this->data);

then your content and then

$this->load->view('footer', $this->data);

You would then repeat the process for page 2 where in your controller's page2 function, you would call

$this->load->view('page2', $this->data);

and your page2 view file is almost identical to page1 except you use your page 2 content in that area.

You could even use a single template view file and pass it a $content variable (which obviously changes per page) and call

$this->load->view('template', $this->data);