如何自动加载页眉和页脚视图?
Posted
技术标签:
【中文标题】如何自动加载页眉和页脚视图?【英文标题】:How do I automatically load a header and footer view? 【发布时间】:2019-12-09 05:48:04 【问题描述】:我是使用 CodeIgniter 的新手,但我对 mvc 结构和 CodeIgniter 本身有足够的了解,可以做一些简单的事情,比如在控制器中加载视图和自动加载库等。但我遇到的问题是我有一个页眉和页脚视图,我希望每次加载视图文件时自动加载。
我进行了一些搜索,但很多建议都过时了,或者有时我根本不明白解决方案。我已经创建了标题视图并在其中链接了我的 CSS,还创建了我的页脚视图。所以假设我想加载默认的欢迎页面,如下所示:
public function index()
$this->load->view('welcome_message');
我可以像这样手动加载它们:
public function index()
$this->load->view('common/header');
$this->load->view('welcome_message');
$this->load->view('common/footer');
但我想要的是像正常一样加载视图并自动加载我的页眉和页脚。我知道这需要使用具有某种模板功能的自定义库来完成,但我不知道如何从头开始。
【问题讨论】:
为什么不使用基本控制器并从那里加载页眉和页脚? 【参考方案1】:我这样做了,它对我有用。
MY_Loader.php
class MY_Loader extends CI_Loader
public function template($content,$var=array())
$this->view('common/header');
$this->view($content,$var);
$this->view('common/footer');
放入core
文件夹。
在你的控制器中:
public function index()
$content = "welcome_message";
$data = array();
$data['name'] = "Max";
$data['country'] = "USA";
$this->load->template($content,$data);
调用视图中的数据:
<html>
<?php echo $name.' - '.$country; ?>
</html>
【讨论】:
啊,漂亮又简单!你如何传递数据呢?对于正在传递的任何数据,我是否需要向模板函数添加第二个参数? 我知道这是很久以前发布的,但是使用它不允许我将视图文件放在主视图文件夹的子文件夹中,有什么补救措施吗?【参考方案2】:创建一个名为MY_Controller
的核心控制器类,并使每个控制器都扩展该控制器:
class MY_Controller extends CI_Controller
public $data = array();
public function __construct()
parent::__construct();
public function render($view)
$this->view('layouts/header', $this->data);
$this->view($view, $this->data);
$this->view('layouts/footer', $this->data);
现在在您的控制器中:
class Welcome extends MY_Controller
public function __construct()
parent::__construct();
public function index()
$this->data['title'] = 'Welcome Home';
$this->render('welcome_view');
【讨论】:
以上是关于如何自动加载页眉和页脚视图?的主要内容,如果未能解决你的问题,请参考以下文章