我在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');
?>
所以我有什么建议吗?
答案 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)
另一种方法是使用基本控制器。我的所有控制器都扩展了我的自定义基本控制器,它在每个页面上保存我需要的东西,例如包含当前用户的对象。