使用codeigniter的模板文件时传递到标题

时间:2012-02-07 03:52:48

标签: php templates codeigniter

我开始学习codeigniter和整个MVC框架。我想找到的是如何将数据添加到头文件而不必将其添加到每个控制器。

这是我的文件布局

application
  --controller
    --main.php
  --view
    --includes
      --header.php
      --footer.php
      --template.php
    --main.php

在我的main.php文件中,我有

function main() {
    $data['mainView'] = "main";
    $this->load->view('includes/template',$data);
}

在我的template.php文件中

<?PHP
 $this->load->view('includes/header');
 $this->load->view($mainView,$data);
 $this->load->view('includes/footer');

再次......我正在寻找的是一种全局将数据传递到头文件的方法,因此我不必将数据添加到我制作的每个控制器中。我要传递的数据类型是用户数据(用户名,上次登录,消息......)

谢谢!

1 个答案:

答案 0 :(得分:3)

我已经看到过两种好方法:

<强> 1。将其添加到MY_Controller类,所有相关控制器都会扩展:

<?php

class MY_Controller extends CI_Controller {

    public function __construct()
    {
        parent::__construct();

        $this->load->vars(array(
            'foo1' => 'bar1',
            'foo2' => 'bar2'
        ));

        // Now, all your views have $foo1 and $foo2
    }
}

<强> 2。将它添加到MY_Output类,这是有道理的,因为完整的HTML页面的呈现方式与AHAH部分或AJAX响应不同:

<?php

class MY_Output extends CI_Output {

    public function _display($output = '')
    {
        if ($output == '')
        {
            $output = $this->final_output;
        }

        $CI =& get_instance();

        // Run checks here (on the Input class, likely) to see if the
        // response expects application/json, text/html, etc.

        $output = $CI->load->view('includes/header', array(
            'foo1' => 'bar1',
            'foo2' => 'bar2'
            ), TRUE) . $output;

        $output .= $CI->load->view('includes/footer', NULL, TRUE);

        parent::_display($output);
    }
}

这种方式还具有不必在每个视图中包含页眉/页脚的优点,并且以后更容易更改方向。

干杯!