0

我一直在研究 CodeIgniter 模板系统,到目前为止,它允许您更改页眉或页脚文件中的内容,但我正在寻找一种将数据从模型自动加载到头文件的方法(取决于模板)。

例如,在我的标题中,它显示了用户的用户名和收件箱。我需要从模型和用户用户名加载用户未读消息。这取决于模板 - 我只想在用户登录时加载该信息。

4

3 回答 3

1

将数据从模型传递到视图不是一个好习惯。

您应该首先将数据传递给控制器​​,然后再传递给您的视图。

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; ?>
于 2012-07-14T15:19:57.073 回答
0

实现代码以在控制器中检索数据,然后通过 AJAX 加载并显示在标题中。在不破坏 Codeigniter 实践的情况下,这是一个可行的解决方案。

于 2012-07-14T16:43:17.190 回答
-1

正如帕克所说,从视图中调用模型并不是一个好主意。但如果你还想这样做,你可以做到。

获取 Codeigniter 实例如下

$CI =& get_instance();

使用 Codeigniter 实例,可以调用模型。

于 2012-07-14T15:28:52.247 回答