2012-05-28 81 views
0

我需要將這樣的網址重新定向到http://mysite.com/store/store-namehttp://mysite.com/stores/products/store-id。請注意,我需要從數據庫中獲取商店標識。那麼是否有可能在routes.php中執行db操作?Codeigniter路由URL,產品名稱爲產品ID

而在文檔中,語法是$route['store/:any']。如何獲得第二個參數的值,這裏提到的是:any

回答

4

有沒有真正的任何好,也沒有簡單的方法來通過路由運行數據庫查詢。然而,您可以在控制器功能開始時進行驗證。

我認爲你的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您有:

  • 命名的表產品
  • 命名ID列那是你的產品ID
  • 命名一列,這是基於你的store-name
+0

在這種情況下,我沒有獲得'$ mix'的值。 – Stranger

+0

您是否添加了路線?如果你已經這樣做了,你應該可以得到'$ mix'的值。試試'var_dump()'它呢? –

+0

當我這樣做時,我得到的價值只有1美元的混合價值,而不是正確的價值。 – Stranger

0

是的,這很容易,你只需要顯示的ID,而不是名稱, 你必須做這樣STORENAME>點擊查看詳情

讓它作爲

STOREID>點擊查看詳情

,當你傳遞參數到數據庫中,改變的MySQL的檢查,將其更改爲ID,而不是名稱,可有些像 「從table_name的選擇yourRequiredColumn其中id =」參數「。

謝謝

1

我可能會有點遲到了,但我可能有一個替代建議。

我用我的路線如下:

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這意味着用戶將仍然可以看到相關頁面。

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)); 
    } 

我希望這可以幫助你。

相關問題