2

我已經在CI用戶指南和Stackoverflow中找到了解決方案,但找不到。所以,這是我的問題。構建具有可變段的Codeigniter URL

我需要建立SEO友好的網址。我有一個名爲「Outlets」的控制器,我需要生成的視圖將具有像http://www.mysite.com/[city]/[area]/[outlet-name]這樣的URL結構。

細分城市和地區是各自表中的字段,outlet_name是表「出口」中的字段。

我能夠生成像http://www.mysite.com/outlets/123這樣的URL,但是如何將城市和地區名稱添加到URL中。

回答

3

如果所有的頁面都使用相同的控制器,在配置/ routes.php文件添加此...

$route['(:any)/(:any)/(:any)'] = "outlets/$1/$2/$3"; 
$route['(:any)/(:any)/(:any)/(:any)'] = "outlets/$1/$2/$3/$4"; // fixed typo 

在控制器中你將要重新映射函數調用,因爲笨將尋找功能與城市的名字,他們將不存在。

http://codeigniter.com/user_guide/general/controllers.html#remapping

public function _remap($city, $area, $outlet, $options = '') 
{ 
    $this->some_function_below($city, $area, $outlet, $options); 
} 
+0

感謝您的回答。我有多個控制器。另外,如果我需要將其他片段傳遞給該網址,例如,http://www.mysite.com/[city]/[area]/[outlet-name]/[outlet-pictures]/123。我應該簡單地將兩個參數添加到路由規則中。 – vikrants

+0

您可以使用路徑傳遞變量,也可以在控制器中測試它們。我編輯了上面的答案以顯示傳遞更多選項。該URL將保持(mysite.com/[city]/[area]/[outlet-name]/[outlet-pictures]/123),所以在控制器中,您仍然可以測試段4和5.在您的重映射功能中,您可以根據您的變量調用不同的函數。 – Thom

+0

好吧,Thom,會試試這個。謝謝。 – vikrants

0

另一種替代的解決方案。

您可以使用URI段。對於像http://www.mysite.com/[city]/[area]/[outlet-name的URL]

<?php 

$this->uri->segment(3); // city 
$this->uri->segment(4); // area 
$this->uri->segment(5); // outlet-name 

?> 

等等...詳情請參閱http://codeigniter.com/user_guide/libraries/uri.html

+1

我的理解是$ this-> uri-> segment()用於檢索URL的片段。我面臨的問題與檢索URL段無關,而是與加載視圖設置段相關。再次澄清,我想建立一個像http://www.mysite.com/[city]/[area]/[outlet-name]這樣的URL,它應該加載http://www.mysite上的outlet詳細信息視圖。 COM /出口/ 123。問題是如何將城市和地區名稱傳遞給URL。看來我需要反向路由的幫助。 – vikrants