在CodeIgniter站点中包含多个标头

时间:2014-06-15 06:04:01

标签: php codeigniter dry

我正在开发一个相当大的CodeIgniter项目。会有更多的页面比我可以计算。现在,我有几个不同的标题,具体取决于用户访问的页面,还取决于用户是否登录。例如,如果用户未登录(没有存储会话变量),那么我想显示header1显示了一些基本的东西,如“注册,登录”。如果用户已经登录,我想显示不同的菜单项,如“注销”。这是一个非常基本的例子。这些更改可能非常广泛,因此我有一个带有控制流逻辑的头文件是没有意义的。

我正在寻找一种方法来包含相应的标头,而不必在我的控制器中的每个方法中编写$this->load->view('header')。看起来另一个选择是在我拥有的每个视图中写入该行。为了实现这种动态,我创建了一个MY_Controller文件,其中包含了类似的内容:

public function get_header()
{
    if ($this->session->userdata('user_id')) {
        $this->load->view('headers/logged-header');
    } else {
        $this->load->view('headers/header-home');
    }

}

然后我将<?php MY_CONTROLLER::get_header(); ?>包含在我需要的地方(即方法或视图内)。

有没有办法以某种方式“挂钩”这个,我可以简单地编写一次这个代码,然后应用程序每次加载我调用页面的方法时都会处理它?

2 个答案:

答案 0 :(得分:2)

这是一个非常典型的需求,可以通过使用CI在其所有控制器中使用的OOP轻松处理。
由于所有自定义控制器都必须从CI_Controller继承,因此您可以编写一个继承自base的{​​{1}}控制器(类),它执行一些非常基本的操作,如:

  • CI_Controller中执行其所有子类可能需要的基本操作(例如__construct,并且可以将auto login logic放在此处)
  • 提供get_header所有子类可能需要右检查分页小部件生成器 ......

答案 1 :(得分:0)

可能最简单的方法是在所有控制器的构造函数方法中调用该函数。这样,它每次都会调用类中的每个方法。只需确保首先调用父构造函数。