我一直在研究 CodeIgniter 模板系统,到目前为止,它允许您更改页眉或页脚文件中的内容,但我正在寻找一种将数据从模型自动加载到头文件的方法(取决于模板)。
例如,在我的标题中,它显示了用户的用户名和收件箱。我需要从模型和用户用户名加载用户未读消息。这取决于模板 - 我只想在用户登录时加载该信息。
我一直在研究 CodeIgniter 模板系统,到目前为止,它允许您更改页眉或页脚文件中的内容,但我正在寻找一种将数据从模型自动加载到头文件的方法(取决于模板)。
例如,在我的标题中,它显示了用户的用户名和收件箱。我需要从模型和用户用户名加载用户未读消息。这取决于模板 - 我只想在用户登录时加载该信息。
将数据从模型传递到视图不是一个好习惯。
您应该首先将数据传递给控制器,然后再传递给您的视图。
http://codeigniter.com/user_guide/overview/appflow.html
正如您在此应用程序流程图中所看到的 - 模型和视图之间没有直线。
如果您有兴趣在“布局”中显示模型数据 - 使用钩子!
http://codeigniter.com/user_guide/general/hooks.html
定义一个“pre_controller”钩子,获取 CI 实例,加载模型,检索数据并将其显示在您的布局中。
启用挂钩
$config['enable_hooks'] = TRUE;
定义一个钩子,如:
$hook['pre_controller'] = array(
'class' => 'MyClass',
'function' => 'Myfunction',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('beer', 'wine', 'snacks')
);
例如
钩
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Gamescount
{
private $model_name = '';
public function __construct()
{
$this->CI =& get_instance();
$this->model_name = 'Games_model';
$this->CI->load->database();
$this->CI->load->model($this->model_name);
$this->CI->load->helper('url');
}
public function count_games()
{
$all_games = $this->CI->Games_model->getAllGames();
$this->CI->gamescount = count($all_games);
}
}
?>
在您的布局中,您可以获得游戏计数值,例如
<?php echo $this->gamescount; ?>
实现代码以在控制器中检索数据,然后通过 AJAX 加载并显示在标题中。在不破坏 Codeigniter 实践的情况下,这是一个可行的解决方案。
正如帕克所说,从视图中调用模型并不是一个好主意。但如果你还想这样做,你可以做到。
获取 Codeigniter 实例如下
$CI =& get_instance();
使用 Codeigniter 实例,可以调用模型。