2010-03-26 190 views
9

我使用$数据在我所有的观点$this->load->view('my_view', $data);笨全局变量

我也有自动加载一个控制器本指南Extending Core Controller

以下但我想使$全球数据,因为在views存在侧边栏这是不变的整个项目,并显示通过数据库获取自动装载控制器的信息

目前,我必须手动写每个$ data ['todo']并从自动加载模型

谢谢。

回答

16

1:下面创建application/librariesMY_Controller

class MY_Controller extends Controller { 
    var $data;  
    //constructor function    
} 

2:在您所有的控制器文件替换ControllerMY_Controller并加载意见与$this->data

class Contact extends Controller { //to.. } 

class Contact extends MY_Controller { 
$this->load->view('contact_view', $this->data); 
} 

通过这种方式,您可以执行默认功能,适用于MY_Controller中的整个站点,如加载设置。

+0

这不是为我工作! – JoeM05 2011-02-02 23:38:13

+0

如果它不起作用,然后尝试把MY_Controller.php信息应用程序/核心 如果你改变前缀为某事,然后一定要改变它在配置。php @ $ config ['subclass_prefix'] – 2011-09-30 16:33:48

5

今天早些时候我遇到了类似的问题。我发现一个简单的方法,而不是全局的方法是使用常量。您可以定义一个常量文件,该文件会从你的index.php文件加载:

// Include additional constants 
$defines_file = 'includes/defines.php'; 
if (file_exists($defines_file)) 
{ 
    require_once($defines_file); 
} 

然后,您可以将您的常量到defines.php文件:

define(MY_CONSTANT,'my constant info'); 

这样,他们将在任何文件中提供整个系统直接:echo MY_CONSTANT;或者您可以将它们分配给变量。

我决定这种方式对我来说会更容易,因为我只有1个位置可以去/何时需要改变常量。

更多:http://codeigniter.com/forums/viewthread/56981/#280205

+0

它的好主意,我已经使用了所有常量值,但这不适合我,因为我从db获取的数据每次都是不同的。使用另一个包含脚本不会让我使用内置的CI数据库库,所以我不得不这样做 – Shishant 2010-03-27 19:11:42

-1

而不是使视图数据全球性的,我会建议使用HMVC构建模块来产生这种侧边栏视图。 HMVC是对部分视图进行编码的一种很好的干净方式。

+3

当你谈论像部分视图那样简单的事情时,HVMC是矫枉过正的。如果你有一个不太多的局部视图,只需要将视图加载到常量本身中:'define('MY_VIEW',$ this-> load-> view('my_view','',TRUE));'' - 然后只需在大视图中回显MY_VIEW常量。 HVMC为这样简单的事情增加了很多行李。 – 2010-03-28 01:18:11

+0

代码中的哪个位置可以加载渲染局部视图所需的数据? – 2010-03-28 08:41:45

1

我使用了一个辅助函数来调用一个全局函数!

例如。

function get_user($userid){ 
    $CI =& get_instance(); 

    $query = $CI->db->get_where('users', array('id' => $userid), 1, 0); 
    foreach ($query->result() as $row){ 
     // Return a object with userdata! 
     return $row; 
    } 
} 

现在我有机会到我的用户数据无处不在..