如何在CodeIgniter 2.1中将视图加载到另一个视图中?

25

我一直在使用CI,看到CI网站上说可以将一个视图作为数据的变量部分加载到“主”视图中,所以根据这个网站(上面说了很多东西,而且很多不像他们说的那样,比如分页等),我做了以下操作:

$data['menu'] = $this->load->view('menu');
$this->load->view ('home',data);

我的问题是,当我运行代码后,在整个站点的顶部(在开始我的 body 和所有内容之前)会有菜单的回声,而且在本来应该显示为空的位置上也有菜单,就好像在所有内容之前就已经被打印出来了。对于这个问题我实在没有头绪,有人之前遇到过同样的问题吗?

2个回答

68

有两种方法可以实现这个:

  1. 事先加载(就像你正在做的那样),然后传递给其他视图

  2. <?php
    // the "TRUE" argument tells it to return the content, rather than display it immediately
    $data['menu'] = $this->load->view('menu', NULL, TRUE);
    $this->load->view ('home', $data);
    
  3. 在视图中“嵌套”加载一个视图:

    <?php
    // put this in the controller
    $this->load->view('home');
    
    // put this in /application/views/home.php
    $this->view('menu');
    echo 'Other home content';
    

嗨,非常感谢,我本来要回答这个问题,但我的用户积分不允许我这样做...问题在于第三个参数FALSE,我不知道...谢谢。 - jpganz18
谢谢。在这种情况下,空值是最重要的参数。 - Mohammed Saqib Rajput
方法一简单实用,不需要使用任何库。谢谢。 - Terry Lin
我该如何将一个数组加载到第二个视图中?使用您上面的示例1,$this->load->view('menu', DATA_ARRAY, TRUE)。 - frobak
@frobak 你需要显式地传递它们 $this->view('menu', compact('menu')); - animaacija

7
创建一个辅助函数
function loadView($view,$data = null){
    $CI = get_instance();
    return $CI->load->view($view,$data);
}

在控制器中加载助手,然后在视图中使用该函数来加载另一个助手。

<?php 
...
    echo loadView('secondView',$data); // $data array
...
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接