在视图中包含其他视图的最佳方式

时间:2012-11-30 13:57:57

标签: php codeigniter

我有一个用mvc Codeigniter编写的网站。我希望在特定位置的视图中调用另一个视图,因为例如菜单在许多页面中重复,并且对所有页面都是相同的。

在我的控制器中,我写了这个:

public function home()
    {
      $data['menu_function'] = $this->load->view('backend/include/menu_function_view');
      $data['menu'] = $this->load->view('backend/include/menu_view');
      $this->load->view('backend/include/header_view_logged');
      $this->load->view('backend/home_view',$data);
      $this->load->view('backend/include/footer_view');
    }

进入我的home_view

<?php 
echo($menu_function);
?>
<div id="page">
    <?php 
    echo($menu);
    ?>
     <div id="content">
....

问题是$ menu中的内容是表单页面。我在firebug中看到过,html就像这样:

<div id="menu">
...
</div>
   <div id="page">
    ...
   </div>

而不是:

<div id="page">
     <div id="menu">
      ...
     </div>
   </div>

我该如何解决?

1 个答案:

答案 0 :(得分:1)

不知道这是否是最好的方法,但通常我用来创建加载视图的模板文件。这里有基本的想法:

在文件夹视图中我创建包含以下内容的文件template.php:

$this->load->view('includes/header');
$this->load->view( $main_content );
$this->load->view('includes/footer');

然后我创建文件夹视图/ include,其中包含:

档案header.php and footer.php

在控制器中我打电话:

$data['main_content'] = 'user/dashboard';
$this->load->view('template', $data);

编辑:菜单问题

如$ menu_config这样的数据传递到标题或视图模板。

的header.php

<html>
<head>
    <title>$title</title>
</head>
<body>

<?php 
    if($menu_position == 'top1') { 
        $this->load->view($menu);
    }
?>

在控制器上:

$data['main_content'] = 'user/dashboard';
$data['menu'] = 'top_menu';
$data['menu_position'] = 'top1';
$this->load->view('template', $data);