2010-07-01 7 views
1

나는 이걸로 올바른 길을 가고 있는지 확신하지 못합니다 - 라우팅에 꽤 익숙합니다. 사과드립니다.어떻게 URL에서 특정 세그먼트 문자열을 무시하도록 Codeigniter 라우팅을 구성합니까?

사이트 방문자가 모바일 또는 전체 화면을 선택할 수있는 페이지 하단에 링크가 있습니다. 나는 그들이 모든 페이지에서 이것을 할 수 있기를 바랍니다. 사이트 중 하나를 선택하면 사이트에있는 위치 (즉, 다양한보기, 기능 등)에 따라 여러 가지 일이 발생할 수 있습니다.

지금은 기본 동작 인 쿼리 문자열을 허용하도록 Codeigniter를 구성하지 않았습니다. 따라서 링크에서 환경 설정을 전달하려면 URL 세그먼트를 사용하여 환경 설정을 수행해야합니다.

내가 좋아하는 뭔가를 기대했다 : 난 경우, 그러나 등/환영/색인/m 또는/일정 /보기/m : 내가 탐색하고 때 잘 작동

<? if ($in_mobile_view): ?> 
    Mobile | <a href="<?= current_url() ?>/f">Full Site</a> 
<? else: ?> 
    <a href="<?= current_url() ?>/m">Mobile</a> | Full Site 
<? endif ?> 

/welcome/m 또는/m - 컨트롤러의 인덱스 메소드가 시작되어야하는 곳에서 메소드를 찾을 수 없기 때문에 404가 발생합니다. 존재하지 않기 때문에입니다.

내 생각에 라우팅을 통해 Codeigniter가 "m"과 "f"문자열을 무시하고 URL에 전혀없는 것처럼 작동하도록 구성 할 수있었습니다.

이 문제를 해결하는 좋은 방법입니까? 그렇지 않다면 다른 제안을 듣고 싶습니다. 이것이 적당한 방법이라면 누군가 라우팅에 대해 올바른 방향으로 나를 안내 할 수 있다면 정말 고맙겠습니다.

감사합니다.

답변

3

왜 이것을 URL과 함께 선택합니까?

사용자 에이전트 라이브러리를 사용하여 기본 "모바일"을 감지 할 수 있습니다. 이 값을 사용하고 사용자 에이전트가 제안한대로 세션을 설정 한 다음 클릭하면 모바일 버전과 정식 버전간에 사용자를 전환하는 컨트롤러에 간단히 연결할 수 있습니다.

이 코드는 어딘가에 글로벌 코드로 실행하거나 Base Controller으로 실행하십시오.

if($this->user_agent->is_mobile() && ! $this->session->userdata('site_mode')) 
{ 
    $this->session->set_userdata('site_mode', $this->user_agent->is_mobile() ? 'mobile' : 'full'); 
} 

컨트롤러는 클릭 한 세션에 따라 세션을 설정할 수 있습니다.

+0

감사 필 전체
/스위치 모바일

/스위치//. 나는 탐지 코드를 가지고있다. 내 목표는 방문자에게 다른보기를 선택하는 옵션을 제공하는 것이 었습니다. 따라서 iPhone을 가진 사람이 페이지를 방문하면 자동으로 모바일 환경이 제공됩니다. 그러나 그들이 원하는 경우 전체 경험을 선택할 수있는 옵션도 제공됩니다. 나는 그 선택을 쿠키에 저장할 것이므로 다음에 방문자가 왔을 때 그들이 어떤 선택을했는지 보여줄 것이다. 해결책에 대한 유일한 질문은/스위치/모바일 또는/스위치/전체에 연결하면 사람들을 원래 페이지로 리디렉션 할 수 있다는 것입니다. – someoneinomaha

+0

당신이 그렇게 명확하지 않았 으면 좋겠어요 .-p 링크 스위치/모바일/컨트롤러/방법/뭐든간에 ... function mobile() { // 어떤 쿠키 물건 $ uri = & func_get_args(); 리디렉션 ($ uri); } 다시 컨트롤러/메소드/그 무엇이든지 보내 줄 것입니다. –

관련 문제