2012-02-07 51 views
1

我開始學習codeigniter和整個MVC框架。我希望找到的是如何將數據添加到頭文件而無需將其添加到每個控制器。使用模板文件進行codeigniter時傳遞給標題

這裏是我的文件佈局

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'); 

再次...什麼即時通訊尋找是一種將數據全局傳遞到頭文件的方法,所以我不必將數據添加到每個我製作的控制器中。我將傳入的數據類型是用戶數據(用戶名,最後登錄,消息....)

謝謝!

回答

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); 
    } 
} 

這種方式還具有無需在每個視圖中包含頁眉/頁腳的優點,並且稍後更易於更改方向。

乾杯!

+0

請你解釋一下我是新的codeigniter和我有同樣的情況。 – 2015-07-09 08:00:55

相關問題