在CI中加载页眉和页脚视图

时间:2011-12-22 08:15:41

标签: templates codeigniter

有没有办法加载视图'header'/'footer'而不在每个控制器中调用$this->load->view('header')$this->load->view('footer')?也许一个模板可以在每个视图中使用?

4 个答案:

答案 0 :(得分:8)

以下是一些简单的方法可以帮助您入门:

创建模板类:

class Template {

    function load($view)
    {
        $CI = &get_instance();
        $CI->load->view('header');
        $CI->load->view($view);
        $CI->load->view('footer');
    }

}

控制器中的用法:

$this->template->load('my_view');

使用主视图文件:

<!-- views/master.php -->
<html>
  <header>Your header</header>
  <?php $this->load->view($view, $data); ?>
  <footer>Your footer</footer>
</html>

在控制器中:

$this->load->view('master', array(
    'view' => 'my-view-file',
    'data' => $some_data
));

我更喜欢Template类方法,因为很容易添加方法来附加模板区域,加载javascript文件以及您需要的任何其他内容。我也更喜欢根据被调用的方法自动选择视图文件。像这样:

if ( ! isset($view_file)) {
    $view_file = $CI->router->fetch_class().'/'.$CI->router->fetch_method();
}

如果控制器为views/users/index.php且方法为Users,则会加载index

答案 1 :(得分:0)

您需要以某种方式加载视图文件,这与CI用于包含文件的方式相同。

坚持标准,我认为这是最好的做法。

答案 2 :(得分:0)

创建一个加载页眉和页脚的函数,并将数据置于其间。

无论如何,构建CI的模型需要显式加载视图(afaik)。

答案 3 :(得分:0)

我通常会扩展CI的Loader类来完成这个......

<?php
class MY_Loader extends CI_Loader {

    public function view($view, $vars = array(), $return = FALSE, $include_header = TRUE, $include_footer = TRUE)
    {
        $content = '';

        if ($include_header)
        {
            $content .= parent::view('header', $vars, $return);
        }

        $content .= parent::view($view, $vars, $return);

        if ($include_footer)
        {
            $content .= parent::view('footer', $vars, $return);
        }

        return $content;
    }
}