我正在开发一个相当大的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(); ?>
包含在我需要的地方(即方法或视图内)。
有没有办法以某种方式“挂钩”这个,我可以简单地编写一次这个代码,然后应用程序每次加载我调用页面的方法时都会处理它?
答案 0 :(得分:2)
这是一个非常典型的需求,可以通过使用CI在其所有控制器中使用的OOP轻松处理。
由于所有自定义控制器都必须从CI_Controller
继承,因此您可以编写一个继承自base
的{{1}}控制器(类),它执行一些非常基本的操作,如:
CI_Controller
中执行其所有子类可能需要的基本操作(例如__construct
,并且可以将auto login logic
放在此处)get_header
所有子类可能需要右检查,分页小部件生成器 ...... 答案 1 :(得分:0)
可能最简单的方法是在所有控制器的构造函数方法中调用该函数。这样,它每次都会调用类中的每个方法。只需确保首先调用父构造函数。