将值从模型传递到CI中的视图

时间:2010-10-27 19:02:42

标签: class codeigniter model view

我在CI中有这个库,可以检索我最新的Twitter更新。它有一个功能,可以将我的最新更新作为对象发送到我的控制器。

我想在页面的页脚上显示这些Twitter更新,因此它们始终可见。

现在我的问题是我如何直接从视图中调用它们?我知道这不是MVC的好习惯,但我不知道我怎么能做到这一点。 我的控制器目前正在处理我所有不同的页面(这是一个小网站),我不认为在控制器中的每个页面函数结束时调用我的twitter类,然后将其发送到视图是非常好的做法

我在控制器中执行此操作:

<?php
    function index(){
    $data['page'] = 'home';
    //i don't want to call my twitter class here every single time I write a new page. (DRY?!)
    $this->load->view('template', $data);
    }
?>

并加载“模板”视图,如下所示:

<?php
$this->load->view('header');

$this->load->view('pages/'.$page);

$this->load->view('footer');
?>

所以我有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我有一个帮助程序库,它将页面部分打包并将其包装在主主题中。您可以使用load->view上的可选参数渲染为字符串。

然后,当您渲染母版页时,您可以加载Twitter更新并显示它们。虽然,我强烈建议至少缓存你的Twitter响应5分钟,这将为你节省很多开销。

示例:

// Controller somwhere:
$content = $this->load->view('pages/'.$page, array(), true);
$this->myLibrary->masterPage($content);


// Your library:
function masterPage($content)
{

    $twitterData = $this->twitter->loadStuff(); // whatever your function is

    $twitter = $this->load->view('twitter_bar', array('data' => $twitterData), true);

    $this->load->view('master', array('content' => $content, 'twitter' => $twitter);
}

答案 1 :(得分:0)

另一种方法是使用基本控制器。我的所有控制器都扩展了我的自定义基本控制器,它在每个页面上保存我需要的东西,例如包含当前用户的对象。