Codeigniter多个视图

时间:2011-06-04 04:02:10

标签: php codeigniter

我已从控制器

加载了三个视图
$this->load->view('header_view');
$this->load->view('home_view');
$this->load->view('footer_view');

header_view 中考虑,我打开一个if语句并在页脚中关闭它

<?php
if(!$viewable){
echo "You cant view";
}else{
?>

footer_view 中我关闭了其他

<?php
}
?>

但是这段代码给了我一个错误。 解析错误:语法错误,header_view.php中的意外'}'

是否可以在一个视图中打开if语句并在另一个视图中关闭它......或者任何替代解决方案??? ...

5 个答案:

答案 0 :(得分:3)

与HTML不同,PHP代码块需要有一个开始和结束标记。为什么?因为PHP代码在被发送到请求端(用户)之前在服务器上被解析,而HTML和js是相反的。

这意味着你不能“剪切”php代码块(if,while,for,foreach等)并将另一半放在另一个文件上。它不会解析为完整的PHP代码。

为了让您的代码运行,请尝试以下代码:

<?php
// Make the necessary security validations here 
// then set the value of $viewable
// ...
///
// After that...

if(!$viewable){
   echo "You can't view this page.";
}else{
   $this->load->view('header_view');
   $this->load->view('home_view');
   $this->load->view('footer_view');
}
?>

...或者如果你想保留你的模板页眉和页脚:

<?php
// Make the necessary security validations here 
// then set the value of $viewable
// ...
///
// After that...

$this->load->view('header_view');

if(!$viewable){
   echo "You can't view this page.";
}else{
   $this->load->view('home_view');
}


$this->load->view('footer_view');

?>

我希望那是你正在寻找的那个。如果没有,请告诉我。

答案 1 :(得分:2)

根据我的经验,在视图之间传输代码并不是一个好主意。由于视图是独立的实体,因此您从不喜欢创建相关视图。因为它降低了可用性。

并且不可能在一个视图中打开一个if括号而在另一个视图中关闭。

我百分百肯定必须有其他方法来实现你想要做的事情

答案 2 :(得分:1)

将主视图的名称传递给标题控制器,并将其加载到那里。

控制器:

$this->load->view('header_view', array('view_name' => 'home_view'));

标题视图:

if ($viewable) {
  $this->load->view($view_name);
}

答案 3 :(得分:1)

不,你不能在一个视图中启动if块并在另一个视图中关闭它。

我会在控制器中做出决定,例如:

$this->load->view('header_view');
if(!$viewable) {
    $this->load->view('denied_view');
}
else {
    $this->load->view('home_view');
}
$this->load->view('footer_view');

甚至更好,使用模板视图。

所以你的控制器将是:

$data = array();
if(!viewable) {
    $data['main_content'] = 'denied_view';
}
else {
    $data['main_content'] = 'home_view';
}
$this->load->view('template_view', $data);

然后template_view.php(在视图目录中)将是:

$this->load->view('header_view');
$this->load->view($main_content);
$this->load->view('footer_view');

这意味着您不必在每个控制器上的每个方法中加载页眉和页脚视图,这样您就不会重复自己,它也看起来更整洁。

答案 4 :(得分:0)

这意味着什么,最好在视图中进行操作,让我们查看管理标题内容和页脚。 另一个有更好的方法是,你可以找到布局库。

相关问题