2017-10-18 1 views
0

전 동적 인 웹 사이트를 가지고 있으며 메뉴를 만들고 백엔드에서 모든 것을 동적으로 페이지합니다. 지금 내가 작성하는 당신에게 URL의 순서를 보여주지 :URL의 n 레벨을 받아들이도록 CI의 경로 구성

http://localhost/occ/level1/level2/....leveln 

기본적으로 수준 1, 레벨 2, ... leveln 특정 메뉴 등 가정의 수준 (계층 구조)입니다/contact_section/contact_us 이제 관리자는 여러 페이지를 만들 수 있고 원하는만큼의 수준의 메뉴를 만들 수 있으므로 URL 로직이 부모에서 최대 부모까지 이어지고 URL이 끝날 때까지 계속됩니다. 내가 이름을 일반 컨트롤러에 전달 오전, 기본적으로 db 쿼리를 실행 이름을 가져옵니다 페치 모든 데이터를 한 후 여기에 페이지를 표시합니다 내 경로입니다 :

$route['default_controller'] = 'Home'; 
$route['404_override'] = ''; 
$route['translate_uri_dashes'] = FALSE; 
$route['Admin'] = 'Admin'; 
//$route['(:any)'] = 'Home/pages/$1'; 
$route['(:any)/(:any)'] = 'Home/pages/$1/$2'; 
//$route['(:any)/(:any)'] = 'Home/pages/$1'; 

이제 위의 경로는 두 가지 문제가 있습니다

  1. 의 나는 두 가지 수준이 URL이 있다고 가정하자 그래서 경로 $ 경로 [ ' (: any)/(: any) '] ='홈페이지/페이지/$ 1/$ 2 '; 이제는 페이지 컨트롤러가 이름을 받아들이고 내 경우에 페이지를 표시합니다. URL에있는 성을 컨트롤러에 보내고 싶지만 항상 $ 1을 말하거나 $ 1을 말할 수 있습니다.
  2. 어떻게 일반화 할 수 있습니까? URL에 슬래시로 구분 된 n 개의 이름을 가질 수있는 것처럼 URL의 성을 컨트롤러에 전달하여 모든 경로를 허용하도록 경로를 구성하는 방법. 왜냐하면 현재 경로에 정의 된 다른 레벨의 URL이 있으면 페이지가 표시되지 않기 때문입니다! 당신이 CI (3)를 사용하는 경우

답변

1

당신은 내가 네

public function pages ($params) { 
    $str = explode(',', $params); 

    //now you can manipulate all params 
    $str[0];//param_1 
    $str[1];//param_2 
    $str[n];//param_n 
} 
+0

/설정/routes.php

//http://localhost/occ/level1/level2/....leveln $route['(.+)'] = function ($param) { $params = implode(",", explode('/', $param)); if($params[0] === 'Admin'){ $return = 'Admin/'; } else{ $return = 'Home/pages/'; } return $return . $params; } 

응용 프로그램/설정/Home.php

응용 프로그램처럼 regular expressions을 사용할 수 있습니다 CI 3.X를 사용하고 있는데, 유효하지 않은 인자를 받았다 implad() –

+0

이'$ params = implode (","$ param);을'$ params = (count ($ param))> 1)? implode (",", $ param) : $ params;' – elddenmedio

+0

문자열을 폭발 시켰습니다. 하나가 아닌 두 개의 속성이 반환됩니다 ..... n –