1

yii でカスタムの動的な seo フレンドリー URL を使用したいと考えています。

私はあらゆる種類の記事を読みましたが、それらはすべて同じことを言っています。

これは私がこれまでに見つけたものであり、私のニーズには合いません:

    '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',
)

次のような URL は必要ありません: domain.com/a/b/c/d

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

記事のタイトルを特定できる表現が必要です。

これは、私の URL の 1 つがどのように見えるかです: http://www.linkbook.ro/concurs-castiga-o-invitatie-de-trei-zile-de-festival-la-bestfest-2012-detailsU-2-882。 html

concurs-castiga-o-invitatie-de-trei-zile-de-festival-la-bestfest-2012 が記事のタイトルです

detailsU はアクションです

2 はデータベース ID です

882は記事IDです

4

1 に答える 1

3

私のコメントを答えとして定式化させてください。まだいくつか自分で実装する必要がありますが、これで始められるはずです。

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>',
于 2012-07-24T08:10:31.667 に答える