CodeIgniter干燥导航

时间:2014-09-11 13:13:30

标签: codeigniter controller navigation dry extends

我的老板告诉我干燥导航不要使用重复代码,导航我试图扩展CI_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');   

    }
}

以后我正在创建新的控制器如何加载不同的视图文件

class Pages extends MY_Controller
{
    public function __construct() {


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

    }
}

2 个答案:

答案 0 :(得分:1)

您可以自己创建模板库。例如:

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);
}

在主模板中,只需回显$ content

答案 1 :(得分:0)

如果我理解您的问题,那么您正在尝试实现模板情况。为此,最好的方法是在主页面视图中实际调用模板视图文件。我的意思是你的控制器函数(不是构造函数,表示页面的实际类函数)应该调用主视图,如

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

并在该文件中,您致电

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

然后是你的内容然后

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

然后,您将重复第2页的过程,在控制器的page2功能中,您可以调用

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

并且您的page2视图文件几乎与page1相同,只是您在该区域中使用了第2页内容。

您甚至可以使用单个模板视图文件并将其传递给$content变量(显然每页更改)并调用

$this->load->view('template', $this->data);
相关问题