我需要將這樣的網址重新定向到http://mysite.com/store/store-name
到http://mysite.com/stores/products/store-id
。請注意,我需要從數據庫中獲取商店標識。那麼是否有可能在routes.php中執行db操作?Codeigniter路由URL,產品名稱爲產品ID
而在文檔中,語法是$route['store/:any']
。如何獲得第二個參數的值,這裏提到的是:any
。
我需要將這樣的網址重新定向到http://mysite.com/store/store-name
到http://mysite.com/stores/products/store-id
。請注意,我需要從數據庫中獲取商店標識。那麼是否有可能在routes.php中執行db操作?Codeigniter路由URL,產品名稱爲產品ID
而在文檔中,語法是$route['store/:any']
。如何獲得第二個參數的值,這裏提到的是:any
。
有沒有真正的任何好,也沒有簡單的方法來通過路由運行數據庫查詢。然而,您可以在控制器功能開始時進行驗證。
我認爲你的store-name
是某種產品的slu??基本上,您可以驗證值是否爲數字,如果沒有通過slug找到然後重定向。
的config/routes.php文件
$route["store/(.*)"] = 'stores/products/$1';
/*() and $1 together passes the values */
控制器/ stores.php
/* Class etc. */
function products($mix) {
if (is_numeric($mix))
$int_id = $mix;
else {
$row = $this->get_where('products', array('slug' => $mix))->row();
$this->load->helper('url');
redirect("stores/products/{$row->id}");
}
/* Do stuff with the $int_id */
}
這asumes您有:
store-name
是的,這很容易,你只需要顯示的ID,而不是名稱, 你必須做這樣STORENAME>點擊查看詳情
讓它作爲
STOREID>點擊查看詳情
,當你傳遞參數到數據庫中,改變的MySQL的檢查,將其更改爲ID,而不是名稱,可有些像 「從table_name的選擇yourRequiredColumn其中id =」參數「。
謝謝
我可能會有點遲到了,但我可能有一個替代建議。
我用我的路線如下:
http://mysite.com/store/1/store-name
理由是......根據你的方法,如果你創建
http://mysite.com/store/store-name
但隨後的一段時間(這毫無疑問谷歌已經收錄你的頁面),你決定什麼都原因,你必須改變商店的名稱後「奇妙的商店名稱」,你自然會改變你的鏈接到
http://mysite.com/store/wonderful-store-name
殺死你的SEO和任何索引鏈接。
我使用http://mysite.com/store/1/store-name的解決方案意味着你可以改變store-name
到任何你想要的,但它總是引用1
這意味着用戶將仍然可以看到相關頁面。
任何是可能的CodeIgniter路由。它的一切都在你編碼的方式。 CI中的路由是真的靈活。除標準CI通配符(:any)(:num)外,您還可以使用正則表達式。您甚至可以添加前綴或後綴的路徑變量,如果你有這樣的:
$route['store/(:any)'] = "redircontroller/redirfunction/$1";
// for instance the namelookup method of the mystores controller
$route['stores/products/(:any)'] = "mystores/namelookup/$1";
您通過定義獲得通過控制器在你的路線值的變量獲得的第二個參數(和第三等等)你定義的方法。如果你的新網址中的'產品'也是一個變體,你應該在那裏啓動你的通配符表達式。您也可以使用URI類($ this-> uri-> segment(n))從url中提取參數。
但是,您不需要在routes.php中執行數據庫操作。您可以在路由到的控制器中執行數據庫操作。我的猜測是,您必須使用查詢中網址中使用的任何內容來匹配商店ID。 在任何情況下,您使用路由文件的路徑都是用戶將看到的路徑。要做到重定向你必須接受原來的路徑,然後將用戶重定向到新的路徑,像這樣:
// in some controller that's attached to the original url
public function redirfunct($var){
$this->load->helper('url');
redirect(base_url('stores/products/' . $var));
}
我希望這可以幫助你。
在這種情況下,我沒有獲得'$ mix'的值。 – Stranger
您是否添加了路線?如果你已經這樣做了,你應該可以得到'$ mix'的值。試試'var_dump()'它呢? –
當我這樣做時,我得到的價值只有1美元的混合價值,而不是正確的價值。 – Stranger