2012-07-24 127 views
1

我想在yii中使用自定義動態seo友好的網址。Yii動態SEO友好網址

我看過所有的文章,他們都說同樣的事情。

這就是我設法到目前爲止找到的,它不適合我的需求:

'urlManager'=>array(
     'urlFormat'=>'path', 
     'rules'=>array(
      '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
      '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
      '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 

array(
    '<_c:(post|comment)>/<id:\d+>/<_a:(create|update|delete)>'=>'<_c>/<_a>', 
    '<_c:(post|comment)>/<id:\d+>'=>'<_c>/view', 
    '<_c:(post|comment)>s/*'=>'<_c>/list', 
) 

我不需要像網址:domain.com/a/b/C/d

我需要:domain.com/here-goes-the-article-title-ACTION-ID

我需要一個表達式可以確定文章標題。

這是怎麼了我的網址的一個樣子:http://www.linkbook.ro/concurs-castiga-o-invitatie-de-trei-zile-de-festival-la-bestfest-2012-detailsU-2-882.html

,其中同意,castiga鄰invitatie-DE-TREI-字了得-DE-節日-LA-bestfest-2012是文章的標題

detailsU是行動

2是數據庫ID

882文章ID

+0

你可能打算最終不得不寫自己的UrlRule類,並把它放在第一規則陣列英寸鑑於你沒有在URL中使用任何控制器/動作,它可以是或者讓Yii通過默認控制器/動作路由所有內容並在那裏解析它。我寫了自己的url路由器,但我選擇在url中需要一個控制器,這使得它更容易。 – Blizz 2012-07-24 07:57:07

回答

3

讓我制定我的評論作爲ANS WER。你仍然需要實現一些自己的東西,但是這應該讓你開始:

class MyRule extends CBaseUrlRule 
{ 
    public function parseUrl($oManager, $oRequest, $sPathInfo, $sRawPathInfo) 
    { 
    // Extract database Id and article Id from $sPathInfo and perhaps put it in $_REQUEST 
    if ("url isn't SEO thingy") 
     return FALSE:   
    return 'articles/index'; 
    } 

    public function createUrl($oManager, $sRoute, $aParameters, $sAmpersand) 
    { 
    if ("i have an SEO item to show") 
     return "/however you want to assemble your URL"; 
    return FALSE; 
    } 
} 

上面的例子假設你的路線,通過文章控制器(行爲指數)的一切。

添加到配置中添加以下你的規則的問題:

'urlManager'=>array(
     'urlFormat'=>'path', 
     'rules'=>array(
      array('class' => 'MyRule'), 
      '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
      '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
      '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',