2012-03-22 5 views
0

가능한 중복을보기를로드 한 후 :
Change url in php after reloading a page변경 URL CodeIgniter의에서

내 질문을 반복 할 수 있지만 내가 좋은 말 할 정확한 시나리오 내 실제 코드이 시간을 제공하고있다 내 환자 ... 내 홈페이지 URL은

http://localhost/mediabox/home/box/12 

입니다. 내 홈 페이지에서 특정 언어의 콘텐츠로 페이지가 다시로드되는 링크를 클릭하면 언어에 대한 두 개의 링크가 있습니다.

링크는 뷰 (템플릿/인덱스) 안에 내가 링크를 클릭 할 때 그래서 내가

이제 링크 qurystring으로 입찰 및 LN을 보내고이

<a href="<?php echo base_url(); ?>home/box/?bid=<?php echo $template_data['box_id']?>&ln=<?php echo $lang['language_id']?>"></a> 

처럼 보이는 URL이 또한

http://localhost/mediabox/home/box/?bid=12&ln=2 

로 변경 페이지 선택한 언어에 따라 변화하지만, 내용은 내가 뭘 원하는 페이지 변경의 내용이 아니라 URL이 아니면 만들 ​​수 있다는 것입니다 URL은 페이지를

http://localhost/mediabox/home/box/12/language_name 

홈 페이지를로드하고

public function box() { 
     $url = $this->pageURL(); 
     $id_from_url = explode('/', $url); 

     if (isset($_GET['bid'])) { 
      $id = $this->input->get('bid'); 
     } 
     else{ 
      $id = $id_from_url[6]; 
     } 
     $query = $this->db->get_where('mc_boxes', array('idmc_boxes' => $id)); 
     $row = $query->row(); 
      if (isset($_GET['bid'])) { 
       $box_id = $this->input->get('bid'); 
      } 
      else { 
       $box_id = $row->idmc_boxes; 
      } 
      $customer_id = $row->customers_idcustomers; 
      if (isset($_GET['ln'])) { 
       $language_id = $this->input->get('ln'); 
      } 
      else { 
       $language_id = $row->languages_idlanguages; 
      } 
      $template_id = $this->Home_model->getTemplateID($box_id); 
      $data['template_data'] = $this->Home_model->getTemplateData($template_id); 
      $data['variables_data'] = $this->Home_model->getVariables($customer_id, $language_id); 
      $data['titles_data'] = $this->Home_model->getTitles($box_id,$language_id); 
      $data['categories'] = $this->Home_model->getCategories($customer_id, $language_id); 
      $data['languages'] = $this->Home_model->getLanguages($box_id); 
      $this->load->view('template/index', $data); 

    } 

어떤 아이디어를하시기 바랍니다 다음과 같이 클릭 언어 링크 인 경우 내용을 변경 내 컨트롤러의 방법을로드 한 후 다음과 같습니다?

미리 감사드립니다.

+0

안녕하세요 Faryal - 이전 질문을 수정하는 것이 좋지 않습니까? ':)' – halfer

+0

왜 GET을 지나가나요? 다음과 같이 제어기에 값을 직접 전달할 수 있습니다. 공공 기능 상자 ($ box_id, $ ln) {...} – Rooneyl

+0

@ Rooneyl하지만 처음으로 내 홈페이지를로드 할 때 해당 변수가 없습니다. 내 경로도 변경해야합니까? –

답변

0

컨트롤러 기능에 대해 여러 인수를 정의 할 수 있습니다. 그러나 여러 인수에는 기본값이 있어야합니다.

public function box($id, $language = 'en') { 
    echo "id: " . $id . " - lang: " . $language; 
} 

귀하의 링크 http://localhost/mediabox/home/box/12/language_name

이 반환합니다

id: 12 - lang: language_name 
0

당신은 URI에서 데이터를 추출하는 방법에 대한 몇 가지 옵션이있을 때. 다음은 두 가지입니다.

  1. 하고 URI box/ 후 모든 세그먼트 levye suggestedbox 방법 인수로 전달한다.
  2. URL class을 사용하면 필요한 정보를 얻을 수 있습니다.

remapping에 들어가서 URL을 다시 작성하면 방법 2가 구원이 될 수 있습니다.

컨트롤러에 데이터를 전달하는 방법을보다 잘 이해할 수 있도록 CI 설명서에서 this page을 읽어 보시기 바랍니다.

이것은 마법을 이해하는 데 도움이 될 수 있습니다.

컨트롤러의 첫 번째 줄에 die(var_dump($this->uri->segment_array()));을 넣은 다음 브라우저에서 http://localhost/mediabox/home/box/this_is_argument_1/this_is_2/4/500/six/에 액세스하십시오. $this->uri->segment(3);은 문자열 this_is_argument_1, $this->uri->segment(5) == 4; 등을 포함합니다. 세그먼트 1은 컨트롤러의 이름이고 2는 호출되는 메소드의 이름입니다.

또한 URL 클래스는 codeigniter에 의해 자동으로 초기화되므로 수동으로로드 할 필요가 없으므로 (explode() 또는 그와 비슷한 항목이 필요하지 않음) 또한 유의하십시오.