2013-01-04 61 views
1

我使用codeigniter作爲我的項目中的模塊來顯示信息作爲類別及其項目。codeigniter如何設置路由到默認控制器根據uri分段的號碼

我想要的網址像下面

  1. sitename.com/module/將顯示在隨機順序的所有項目。
  2. sitename.com/moduel/categoryname/將顯示在該類別
  3. sitename.com/module/categoryname/title-of-the-item/這一切項目將顯示該特定項目的細節

此處sitename.com/module/是codeigniter的根,默認控制器是home。

我的問題是如何設置一個段或URI和URI的兩段像

  1. sitename.com/module/應該加載默認的控制器(家在我的情況)
  2. sitename.com路線/模塊/類別名稱/應加載家居/分類/類別名稱
  3. sitename.com/module/categoryname/title-of-the-item應該加載索引/標題/標題的最項

我將定義我的功能NS如下

  1. 功能可按指數()...
  2. 功能類別($類別名)....
  3. 功能標題($標題)....

如此,要麼根據段的數量創建一個路由,要麼有任何其他備用路由來完成這個路由,那很好。

我想使用路由而不是將2段作爲參數傳遞給索引函數。

那麼,?

+0

是模塊子文件夾中的整個CI安裝嗎? – Rooneyl

+0

是的。 sitename.com/modulename文件夾包含CI安裝,它是一個真實的文件夾。 –

回答

5
$route['page/(:any)'] = "home/page/$1"; 
$route['page'] = "home/index"; 
$route['(:any)/page/(:any)'] = "home/category/$1/page/$2"; 
$route['(:any)/page'] = "home/category/$1"; 
$route['page'] = "home/index"; 

$route['(:any)/(:any)'] = "home/title/$2"; 
$route['(:any)'] = "home/category/$1"; 

最後兩行(7和8)是我所需要的...而擔任我的目的之前

行中的最後兩個(1,2,3,4,5)是我如何使用分頁的最後兩行(7,8)

唯一的家/類別和家/有分頁,而不是家/標題這是最終頁面。

與此同時,如果有人發現代碼可能是越野車或需要完善,那麼請添加一個答案,以便我可以更新。

5

將網站的基本網址設置爲sitename.com/module

您可以嘗試數據庫驅動的路由。
這可以通過使用數據庫表爲您編寫路由。

示例數據庫表;

CREATE TABLE IF NOT EXISTS `app_routes` (
    `id` bigint(20) NOT NULL auto_increment, 
    `category` varchar(192) collate utf8_unicode_ci NOT NULL, 
    `controller` varchar(64) collate utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `category` (`category`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1; 

示例路線;

$route[ 'default_controller' ] = 'home'; 
$route[ '404_override' ]  = 'error404'; 

require_once(BASEPATH .'database/DB'. EXT); 
$db =& DB(); 
$query = $db->get('app_routes'); 
$result = $query->result(); 
foreach($result as $row) 
{ 
    $route[ $row->slug ]     = 'home/category_lookup/'.$row->slug; 
    $route[ $row->slug.'/:any' ]   = 'home/item_lookup/'$row->slug/$1; 
    $route[ $row->controller ]   = 'error404'; 
    $route[ $row->controller.'/:any' ] = 'error404'; 
} 

link會給你充分的細節(這不是我的工作 - 谷歌僅僅是我的朋友)。

+0

哇...我集結感謝您的努力回答...我會嘗試這...但我不想使用數據庫截至目前...我設法創建了我已經在這裏回答的路線...可以請確認是否需要更多處理或更少? –

+0

@JayapalChandran數據庫查詢總是會花費更長的時間去檢查硬編碼值。妥協可能會緩存數據庫查詢,只有在添加新類別時纔會更新。 – Rooneyl

+0

哦,好的。我將不得不緩存。好。在發佈上述評論後,我添加了我的解決方法。代碼保持不變? –