2011-01-14 118 views
0

我是Codeigniter的最近用戶,並且正在開發一個簡單的後端CMS來管理頁面。如何在Codeigniter中開發自定義CMS時處理路由

在基於URL(在這個例子中,我已經隱藏「的index.php」):mysite.com/pagename

我希望系統,以檢測是否存在「頁面名稱」在我的數據庫中的值,如果有的話,我需要系統重新路由到一個自定義控制器(例如:Pagemaker),如果沒有記錄稱爲pagename,只是做正常的事情(即找到一個名爲pagename的控制器)

當前我有:

$route['(:any)'] = "pagemaker/create/$1"; 

由此所有請求都被轉發到我的自定義功能。

但是我想改變這個結構,這樣如果頁面不存在於數據庫中,傳統的codeigniter請求過程就會被執行。

任何人都可以提供有關如何完成此任何意見?或者有關通常在codeigniter中路由自定義CMS的任何建議?

回答

1

最好的解決辦法是upgrade to CI 2.0,因爲it's stable enough,它給你很多有用的功能。

在你的情況,設置以下路徑:

$route['404_override'] = 'pagemaker'; 

如果路由器不知道哪裏去了,它只是去PageMaker的控制器。然後可以檢查第一個uri段是否存在,如果不存在,則創建一個自定義404頁面而不是缺省默認頁面。

我不想聽到任何「哦,但它還沒有發佈」廢話,我一直在使用CI 2.0近一年。 ;-)

0

我能想到的兩種可能性:

1)編輯您的自定義功能,讓重定向你的客戶端時,頁面不是在數據庫 僞代碼:

if($dbresult == null){ 
    redirect("http://yoursite.com/"+$this->uri->segment(3)); 
} 

2)編輯路由器因此它會首先檢查頁面是否在db中,如果不是,繼續。這可能會有點混亂,因爲你需要在你的Router.php數據庫連接

+0

這個問題在於你的系統經常在一個循環中 - 每次都重定向回相同的pagemaker類而不工作。 – Ash 2011-01-14 13:23:52

+0

啊當然,我編輯了我的答案 – thomaux 2011-01-14 13:40:10