2011-09-24 66 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