2011-09-24 29 views
1

如果用戶在認證,CodeIgniter的模板

登錄我想表現出不同的菜單,然後,如果用戶沒有登錄。

是實現這個做只是兩種不同的觀點的最好辦法,並根據用戶是否登錄或不包括(在控制器檢查)

class Page extends CI_Controller { 

    protected $file = 'index'; 

    public function index() 
    { 
     if ($this->auth->logged_in()) { 
      $this->file = 'logged_in'; 
     } 

     $data['title'] = 'Hem'; 

     $this->load->view('templates/header', $data); 
     $this->load->view('templates/menu/' . $this->file . ''); 
     $this->load->view('home'); 
     $this->load->view('templates/sidebar/' . $this->file . ''); 
     $this->load->view('templates/footer');  
    } 
} 

這是我的解決方案,到目前爲止,怎麼能提高呢?

回答

2

如果它與標題或菜單一樣小,我通常會將它分解爲視圖部分並確定在視圖中顯示哪一個。我也叫我的主要模板視圖內的所有其他視圖部分,所以它只需要一個$this->load->view()。這種方法會給你這個在你的控制器:

class Page extends CI_Controller { 

    public function index() 
    { 
     $view_data['main_content'] = 'home'; 
     $this->load->view('templates/default'); 
    } 
} 

,這在您的視圖:

$this->load->view('templates/partials/header'); 

if ($this->auth->logged_in()) 
{ 
    $this->load->view('templates/partials/menu'); 
} 
else 
{ 
    $this->load->view('templates/partials/index'); 
} 

$this->load->view($main_content); 

$this->load->view('templates/partials/sidebar'); 
$this->load->view('templates/partials/footer'); 

這樣,你總是調用同一個模板,你可以設置$main_content這是實際您希望加載的視圖以及其他頁面之間保持相同的其他內容已經存在。

+0

如果我想將變量從控制器傳遞給(控制器視圖)到下一個視圖?我怎麼做? – John

+0

到下一個視圖(在你的情況下,家)* – John

+0

哦,nvm。這工作這種方法看起來很棒!謝謝:) – John