掌握CodeIgniter - 模板/加载视图

kil*_*zzy 1 php templates codeigniter views

尝试学习CI并通过文档来更好地理解.如果没有单独的库,我可以通过包含如下所示的视图列表来制作模板:

$this->load->view('header');
$this->load->view('navigation');
$this->load->view('sidenav_open');
$this->load->view('blocks/userinfo');
$this->load->view('blocks/stats');
$this->load->view('sidenav_close');
$this->load->view('content',$data);
$this->load->view('footer');
Run Code Online (Sandbox Code Playgroud)

这是有道理的,但我真的会在每个控制器(页面)上都有这个吗?不确定是否有办法在初始控制器(欢迎)中包含这个,然后在其他人以某种方式引用它?或者也许我完全缺少一些东西

kev*_*out 9

您可以从视图文件中加载视图.例如,考虑一个名为的通用页面模板page_template.php:

<html>
<body>
  <div id = "header">
      <?php $this->load->view('header');?>
      <?php $this->load->veiw('navigation');?>
  </div>
  <div id = "sidenav">
     <?php $this->load->view('sidenav');?>
  </div>
  <div id = "content">
     <?php echo $content;?>
   </div>

  <div id = "footer">
      <?php $this->load->view('footer');?>
 </body>
 </html>
Run Code Online (Sandbox Code Playgroud)

通过使用codeigniter的abiltiy来加载更动态的区域,以将视图作为变量返回到控制器中:

$template['content'] = $this->load->view('content',$data,TRUE);
$this->load->view('page_template',$template);
Run Code Online (Sandbox Code Playgroud)

通过将TRUE传递给加载函数,CI将从视图返回数据而不是输出到屏幕.

你的sidenav部分可能是它自己的视图文件sidenav.php,你的'块'硬编码或加载类似于上面的例子.

我已经完成了两种方式,包括每个控制器方法中的每一个视图位,以及使用加载子视图和动态区域的页面模板,到目前为止,第二种方法让我更快乐.

  • 这很重要,所以我只想稍微澄清一下:将`true`作为视图加载器方法的第三个参数传递返回视图的确切输出_作为string_.当您在异步请求期间加载视图并且希望使用JavaScript将HTML字符串插入DOM时,这尤其有用. (2认同)