2016-01-20 29 views
1

我只是想知道使用codeignitor實現菜單,頁眉和頁腳更改內容(如通知)的最佳方式/練習。使用codeignitor實現動態菜單/頁眉/頁腳的最佳方式

例如,說我在標題菜單中有一個警報,鏈接到數據庫中的數據,我需要檢查每次頁面加載時的更改。最初我以爲我可以每次使用$ this-> load-> view('header')調用頭部,但這意味着我需要一個全局函數來處理警報的任何更改,然後將其傳遞給頭部視圖,每次都不好!

我想我需要一個全局的方式來調用函數,從任何控制器加載網站標題(菜單),它可以計算出內容並相應地顯示視圖。

回答

1

因此例如顯示博客頁面的控制器。
在你的控制器構造 - 定義一個方法,你的博客查看文件所在的文件夾和模板名稱

// the folder your content files are in 
$this->templatefolder = 'blog' ; 
// the template name 
$this->view_template = 'blog_template' ; 

當你準備調用一些看法

$data['content01'] = 'search_articles'; 
$data['content02'] = 'main_article'; 
$data['content03'] = 'suggested_articles'; 
$this->load->view($this->view_template, $data); 

模板本身 意見/blog_template.php

// opening html etc that is generic to website 
$this->load->view('tmpl_open'); 

// so if the header has to be dynamic 
// get the header from a model (or library etc) 
// and either pass the header content or just echo it out directly 
$this->load->model('header'); 

if(! $newHeader = $this->header->returnNewHeader()) 
{ 

    // fallback if the header doesn't come back from the model 
    $this->load->view('default_header'); 

} 
else 
{ echo $newHeader ;  } 

// this is optional but IF the template folder is not set 
// we have a default folder called 'pages' to look in for the content views 

// but in this example the folder is set to be 'blog' 
// so the blog view files will be in application/views/blog/search_articles.php etc etc 
if(isset($this->templatefolder)){ 

$templatefolder = $this->templatefolder . '/' ; } 

else { $templatefolder = 'pages/'; } 

// header that is specific for the content 
$this->load->view($templatefolder . 'header'); 

// so in this specific example its going to load 3 view files, but this part is completely flexible 
if(isset($content01)) 
$this->load->view($templatefolder.$content01); 

if(isset($content02)) 
$this->load->view($templatefolder.$content02); 

if(isset($content03)) 
$this->load->view($templatefolder.$content03); 

if(isset($content04)) 
$this->load->view($templatefolder.$content04); 

if(isset($content05)) 
$this->load->view($templatefolder.$content05); 

if(isset($content06)) 
$this->load->view($templatefolder.$content06); 

if(isset($content07)) 
$this->load->view($templatefolder.$content07); 

if(isset($content08)) 
$this->load->view($templatefolder.$content08); 

// example of an optional file that you can uncomment for testing 
// $this->load->view('objecttesting'); 

// bottom nav bar generic to website 
$this->load->view('tmpl_footer'); 

// closing html etc generic to website 
$this->load->view('tmpl_close'); 
+0

不錯,我喜歡有一個處理所有事情的通知模型的想法:) – user2321428

+0

謝謝 - 是的,我認爲它的重要性在於從不直接從視圖文件調用模型,所以這是一個體面的妥協。當然你也不必使用$ this-> view_template - 你可以直接通過它的名字來調用模板:$ this-> load-> view('blog_template',$ data);我只是想在控制器的頂部定義模板。 – cartalot

相關問題