2012-07-24 6 views
1

Je veux utiliser des URL dynamiques personnalisées SEO yi. Je lis toutes sortes d'articles et ils disent tous la même chose.URL dynamiques SEO Friendly dans Yii

C'est ce que je réussi à trouver à ce jour, et il ne répond pas à mes besoins:

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

ou

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

Je ne besoin urls comme: domain.com/a/b/c/d

J'ai besoin: domain.com/here-goes-the-article-title-ACTION-ID

je besoin d'une expression qui peut identifier le titre de l'article.

Voici comment un de mes urls ressemble: http://www.linkbook.ro/concurs-castiga-o-invitatie-de-trei-zile-de-festival-la-bestfest-2012-detailsU-2-882.html

où Souscrit-castiga-o-invitatie-de-Trei-Zile-de-festival-la-bestfest-2012 est le titre de l'article

detailsU est l'action

2 est l'ID de base de données

882 est l'article id

+0

Vous allez probablement finir par avoir à écrire votre propre classe UrlRule et le mettre d'abord dans le tableau de règles. Étant donné que vous n'utilisez pas de contrôleur/action dans l'URL, c'est soit cela ou Yii route tout par l'intermédiaire du contrôleur/action par défaut et l'analyse là. J'ai écrit mon propre routeur url mais j'ai choisi d'exiger un contrôleur dans l'url, ce qui le rend plus facile. – Blizz

Répondre

3

Permettez-moi de formuler mes commentaires comme ans wer. Il vous reste à mettre en œuvre certaines choses vous-même, mais cela ne devrait vous aider à démarrer:

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

L'exemple ci-dessus suppose que vous acheminez tout par le contrôleur d'articles (indice d'action).

Ajouter à la config est une question d'ajouter ce qui suit à vos règles:

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