【问题标题】:CodeIgniter Dry NavigationCodeIgniter 干式导航
【发布时间】:2014-09-11 13:13:29
【问题描述】:

我的老板告诉我让干导航不要使用重复的代码,对于导航,我正在尝试扩展 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');
        $   

    }
}

【问题讨论】:

  • 什么是“干导航”?
  • 你真正想要达到什么目标?

标签: codeigniter controller navigation dry extends


【解决方案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

【讨论】:

    【解决方案2】:

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

    $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 相同,只是您在该区域使用您的 page 2 内容。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      相关资源
      最近更新 更多