【问题标题】:Codeigniter multiple viewsCodeigniter 多个视图
【发布时间】:2011-06-04 04:02:09
【问题描述】:

我已经从我的控制器

加载了三个视图
$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 中关闭 else

<?php
}
?>

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

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

【问题讨论】:

  • 请在下面查看我的更新答案

标签: php codeigniter


【解决方案1】:

与 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');

?>

我希望这就是您要找的那个。如果没有,请告诉我。

【讨论】:

    【解决方案2】:

    根据我的经验,基本上在视图之间移动代码并不是一个好主意。由于视图是独立的实体,您从不喜欢制作依赖视图。因为它降低了可重用性。

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

    我 100% 确定一定有其他方法可以实现您的目标

    【讨论】:

      【解决方案3】:

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

      控制器:

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

      标题视图:

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

      【讨论】:

        【解决方案4】:

        不,您不能在一个视图中启动 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');
        

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • -1 当您说“它”、“那个”和“另一个”时,您所指的内容非常不清楚。你能改写一下吗?也许是完整的句子。
          • 我认为 Thep 指的是像 Ocular for Codeigniter 这样的模板库。
          猜你喜欢
          • 2012-04-03
          • 2013-03-18
          • 1970-01-01
          • 1970-01-01
          • 2014-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多