2011-09-28 89 views
1

我可以在视图文件中设置变量吗?Codeigniter - 在视图中设置变量

的为例: 我有一个控制器:的welcome.php 其负载:

$this->load->view('header'); 
$this->load->view('main'); 
$this->load->view('footer'); 

我需要设置一个变量上的文件main.php,并获得footer.php

它的可能吗?

+0

你的意思是你想在视图中设置一个变量以备后用?因为,当然,您可以使用标准PHP在HTML中设置变量:'<?php $ some_variable ='某个值'; ?>'。 – Alex

回答

3

无法在视图文件中设置变量并从另一个视图文件访问变量。没有理由你应该在你的视图文件中设置变量。控制器应该处理所有的应用程序逻辑,所以你应该在那里设置变量。我会建议阅读用户指南或阅读一些文章以更好地理解MVC原则。

要访问多个视图中的相同变量,请将其传递给您加载的每个视图。

// Set your variable 
$data['variable'] = 'value'; 

// Pass variable to multiple views 
$this->load->view('main', $data); 
$this->load->view('footer', $data); 
+0

你可以在一个视图中设置一个变量,并在另一个视图中使用它。我一直这样做。我在下面发布了我的答案。 –

+0

这并不总是关于模型相关的变量,是古典的。例如,我使用它来设置“内容”视图中某些javascript的名称,然后在所有HTML内容之后将这些文件加载​​到页脚视图中。 –

1

您可以通过这两个阵列对象到您的视图,例如:

$data = new StdClass; 
$data->title = "The Title"; 
$data->content = "The Content"; 

$this->load->view('main', $data); 

$data = new SomeClass; 
$this->load->view('main', $data); 

此外,在各查看您都能够通过不同的数据:

$data1 = array("key" => "val"); 
$data2 = $this->some_class->some_method($params); 
$data3 = $this->another_class->another_method($params); 

$this->load->view('navigation', $data1); 
$this->load->view('main', $data2); 
$this->load->view('footer', $data3); 
5

您可以像从控制器到视图一样将变量从一个视图传递到另一个视图。你只需要加载设置一个变量,使用视图前视图文件变量:

$this->load->view('main'); //load before 
$this->load->view('footer'); //load after 

内main.php做$this->load->vars(array('your_variable'=>'it's value'));,你就可以调用它在页脚像对其他任何变量。唯一的要求是在footer.php之前加载main.php。

+0

在视图内部设置变量并不是一个好习惯。如果你打算使用这种方法,最好从控制器调用'$ this-> load-> vars()'而不是视图,这样你就不用担心你的顺序了加载视图。 – birderic

+2

@birderic绝对。我只是在极端情况下这样做。但问题不在于最佳实践,而在于如何从视图加载变量。 –