2010-10-27 74 views
0

我在CI中有这个库来检索我最新的twitter更新。它有一个功能,可以将我最新的更新作为对象发送给我的控制器。从模型中传递值到查看CI

我想在页面的页脚上显示这些twitter更新,以便它们始终可见。

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

Typycally我这样做是在我的控制器:

<?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

我有一个辅助函数库,它需要一个页面Partial并将其包装在主控主题中。您可以使用load->view上的可选参数来呈现字符串。

然后,当您渲染母版页时,您可以加载twitter更新并显示它们。尽管我强烈建议至少缓存5分钟的twitter响应,但会为您节省大量开销。

实施例:

// 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); 
} 
+0

谢谢,这样做。有一个帮助加载视图是一个不错的主意。 – networkprofile 2010-10-27 22:08:21

+0

:)谢谢,很高兴我能帮上忙。我从来不明白为什么一个主页的想法从来没有出现在CI中。总是让我难以理解。 – Aren 2010-10-27 23:58:23

0

另一种方法是使用碱控制器。我的所有控制器都扩展了我的定制基础控制器,该控制器在每个页面上都包含我需要的内容,例如包含当前用户的对象