2012-03-12 6 views
4

페이지 매김 할 때 내 GET 매개 변수를 유지할 수있는 방법이 있습니까?페이지 매김 중 url 매개 변수 유지

내 문제는 내가 몇 가지 다른 URL을 내 매김 클래스에서 내가의 다른 페이지 번호가있는 페이지에 대한 링크를 만들하기로했지만 아직 여전히 다른를 유지하고 어떻게

questions.php?sort=votes&author_id=1&page=3 

index.php?sort=answers&style=question&page=4 

을 즉 한 것입니다 URL의 부분들?

답변

5

즉, URL을 구문 분석 한 다음 끝에 매개 변수를 추가하거나 매개 변수가 이미있는 경우 바꾸십시오.

$parts = parse_url($url) + array('query' => array()); 
parse_str($parts['query'], $query); 
$query['page'] = $page; 
$parts['query'] = http_build_str($query); 
$newUrl = http_build_url($parts); 

이 예제 코드는 http_build_urlhttp_build_str에 대한 PHP HTTP module이 필요합니다. 나중에는 http_build_query으로 바꿀 수 있으며 첫 번째 모듈을 설치하지 않은 경우에 대비하여 PHP 사용자 공간 구현이 제공됩니다.

$op = new Net_URL2($url); 
$op->setQueryVariable('page', $page); 
$newUrl = (string) $op; 

그것은 더 유연하고 표현이다 :

또 다른 대안은 다양한 URL 작업에 대한 인터페이스를 제공 Net_URL2 패키지를 사용하는 것입니다.

+0

이것이 최선의 방법으로 간주 되나요? 그렇지 않으면 일반적으로 이러한 상황이 필요하지 않습니까? – yehuda

+0

코드에서 쉽게 액세스 할 수 있도록 함수 또는 클래스로 래핑하는 것이 가장 좋습니다. 또한 기존 함수를 다시 사용하므로 더 좋습니다. 이것은 URL의 query-info-part에있는 매개 변수의 수에 관계없이 작동하며 PHP 구성을 존중합니다. – hakre

+0

@yehuda : 작업을 수행하기 위해 잘 만들어진 구성 요소를 사용하는 몇 가지 추가 예제를 추가했습니다. 이는 더 나은 방법 일 것입니다. – hakre

0

page 매개 변수를 세션에 저장하면 어떨까요? 따라서 모든 단일 페이지 URL을 수정할 필요가 없습니까?

+0

하지만 어떻게하면 URL의 페이지 매개 변수 만 변경합니까? – yehuda

+0

필요가 없습니다. 값 저장 및 검색은 서버 측에서 엄격하게 발생하며 실제 페이지 링크와 독립적입니다. – Sirko

+2

SEO 및 북마크 기능에 신경 쓰는 경우 이는 나쁜 습관입니다. –

6

이 경우 http_build_query()을 사용할 수 있습니다. 이전 매개 변수를 직접 삭제하는 것보다 훨씬 깔끔합니다.

$ _GET과 새 값으로 구성된 병합 된 배열을 전달하고 깨끗한 URL을 가져올 수 있어야합니다.

$new_data = array("currentpage" => "mypage.html"); 
$full_data = array_merge($_GET, $new_data); // New data will overwrite old entry 
$url = http_build_query($full_data); 
2

당신이 http_build_query 같은 짓을, 또는 자신의 함수를 작성하고 싶다면 당신이 어떤 이유로 또는 다른위한 작업의 사용자 정의 할 필요한 경우 :

<?php 
function add_edit_gets($parameter, $value) { 
    $params = array(); 
    $output = "?"; 
    $firstRun = true; 
    foreach($_GET as $key=>$val) { 
     if($key != $parameter) { 
      if(!$firstRun) { 
       $output .= "&"; 
      } else { 
       $firstRun = false; 
      } 
      $output .= $key."=".urlencode($val); 
     } 
    } 

    if(!$firstRun) 
     $output .= "&"; 
    $output .= $parameter."=".urlencode($value); 
    return htmlentities($output); 
} 

?> 

는 그런 다음처럼 당신의 연결을 작성할 수

<a href="<?php echo add_edit_gets("page", "2"); ?>">Click to go to page 2</a> 
+1

['http_build_query'] (http://php.net/http_build_query) 항상 사용할 수 있습니다. 왜 바퀴를 다시 발명해야합니까? – hakre

+0

당신이 원하는 기능에 따라 기능을 사용할 수있는 데이터에 따라, 나는 함수가 http_build_query를 사용하는 것이 더 좋을 것이라고 이해한다 - OP 옵션을 준다. –

+0

예, 내부에 묻혀있는 곳에 $ _GET를 사용하는 대신 URL을 입력 매개 변수로 사용해야합니다.또는 적어도'$ gets' 함수의 매개 변수를 만드십시오. – hakre