2012-01-07 2 views
0

goodmorning,Yii urlmanager 미친 규칙

나는 내 웹 사이트에 또 다른 문제가 있습니다. yellowpages.com과 비슷한 사이트를 개발했습니다. (비슷하지는 않지만 단지 아이디어 만있는 것입니다.)

이제는 SEO 및 URL 재 작성으로 미친 물건을 만들어달라고 요청했습니다.

http://domain.com/category-name/ 대신 http://domain.com/surf/category/3 (:

난 지금 내 main.php

'urlManager'=>array(
     'urlFormat'=>'path', 
        'showScriptName'=>false, 
     'rules'=>array( 
          'surf/category/<id:[0-9]+>/page/<page:[0-9]+>'=>'naviga/categoria/', 
          'surf/subcategory/<id:[0-9]+>/page/<page:[0-9]+>'=>'naviga/sottocategoria/', 
          'surf/page/<page:[0-9]+>'=>'surf/', 
          'contact' =>'site/contact/', 
          'write-mail/<id:[0-9]+>' =>'site/contact/', 
          'privacy' =>'site/page/view/privacy', 
          'register'=>'site/page/view/register', 

          '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
      '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 

      '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 

         ), 
    ), 

요청으로 시작합니다 ..... T_T 는 URL이 그런 일이 될 것이라고합니다 예.)

http://domain.com/category-name/sub-category-name/ 대신 http://domain.com/surf/subcategory/3

http://domain.com/category-name/sub-category-name/society-name/ 대신 http://domain.com/detail/2

그리고 분명히 링크의 나머지는 마지막 3 컨트롤러 규칙과 함께 작동해야합니다 .... 누군가 나를 도울 수 있습니까 ??? 나는 그들이 도움을 사전에

덕분에 내가 화요일에 대한 해결 방법을 찾을 수없는 경우 ..... 내 엉덩이를 걷어차

T_T 것이다 .... 정말 꽉 자리에있어.

답변

8

귀하의 이후는 yii의 기본 정규식 기반 URL 규칙 범위를 벗어납니다. 필요한 것은 사용자 정의 URL 규칙 클래스입니다. 설정에서

: 보호/구성 요소에서

'rules'=>array( 
    array(
     'class'=>'application.components.CategoryUrlRule' 
    ), 
) 

/CategoryUrlRule.php :

class CategoryUrlRule extends CBaseUrlRule { 
    public function createUrl($manager,$route,$params,$ampersand) { 
     if ($route==='naviga/categoria') { 
      return $params['categoryname']; 
     }elseif ($route==='naviga/sottocategoria') { 
      return $params['categoryname'].'/'.$params['subcategoryname']; 
     }else{ 
      return false; // this rule does not apply 
     } 
    } 

    public function parseUrl($manager,$request,$pathInfo,$rawPathInfo) { 
     if (preg_match('%^(\w+)(/(\w+))?$%', $pathInfo, $matches)) { 
      $category=$matches[1]; 
      if(!empty($matches[2]) 
       $subcategory=$matches[2]; 

      // Check in db 
      Yii:app()->db-> //... 

      if(){ // There is a match from db check above 
       if(isset($subcategory)){ 
        $_GET['subcategory']=$subcategory; 
        return 'naviga/sottocategoria'; 
       }else{ 
        $_GET['category']=$category; 
        return 'naviga/categoria'; 
       } 
      } 
     } 
    } 
} 

Using Custom URL Rule Classes

+0

이 단지 새로운 규칙 확인하고 바로 기존 규칙을 덮어 쓰지 않습니다 만들 ? – Aliceiw

+0

일종의, 당신의 URL 규칙의 배열에서 각각은 요청 URL이 일치하는지 확인하기 위해 검사 될 것입니다. 따라서 첫 번째 규칙이 모두 일치하는 경우 다른 규칙은 보이지 않습니다. 첫 번째 규칙에서 false가 반환되지 않는 한 –

+0

요청 유형에만 맞춤 규칙을 적용하려면 어떻게해야합니까? –