2013-07-25 3 views
6

저는 페이지 된 결과 셋을 만들기 위해 Zend \ Paginator를 사용하고 있습니다. 그러나 검색 양식을 추가 한 후에는 제대로 작동하지 않습니다.ZF2의 페이지 매김 URL에 쿼리 매개 변수를 저장하려면 어떻게해야합니까?

페이지의 검색 양식에 의해 생성 된 URL은 다음과 같습니다 그것은 생산의 URL에서 SEARCHTERM을 유지하도록

user/index/?searchTerm=hello 

어떻게 젠드 매기기 구성을 수정합니까? 내가 실종 무엇

user/index/page/4/?searchTerm=hello 

:

내가 좋아하는 뭔가를 기대했다?

echo $this->paginationControl(
     $this->users, 'sliding', array('paginator', 'User'), array('route' => 'user', 'action' => 'index') 
    ); 

매김 템플릿 단편 :

<li> 
     <a href="<?php echo $this->url($this->route, array('action' => $this->action, 'page' => $this->next), true); ?>"> 
      Next &raquo; 
     </a> 
    </li> 

'user' => array(
    'type' => 'Zend\Mvc\Router\Http\Segment', 
    'options' => array(
     'route' => '/user[/[:action[/]]][[id/:id]][/[page/:page]]', 
     'defaults' => array(
      'controller' => 'Application\Controller\User', 
      'action'  => 'index', 
      'id'   => null, 
     ), 

     // the below was added to try and get the searchTerm query to be retained 
     'may_terminate' => true, 
     'child_routes' => array(
      'searchTerm' => array(
       'type' => 'Query', 
      ), 
     ), 
    ), 
), 

는 페이징 뷰 이것을 이용하여 구성되어 다음과 같이


모듈 구성 경로가 정의되고

(나는 느낌은 truethird parameter to url() would retain the query params으로 표시합니다.

답변

2

이제 url()의 세 번째 매개 변수가 무엇을하는지 봅니다. 나는 매김 링크를 단순화하고 다음과 같이 '행동'키를 제거 할 수 있습니다

<a href="<?php echo $this->url($this->route, array('page' => $this->next), true); ?>"> 

페이지의 조치 (때문에 진실되고 그 세 번째 PARAM에) URL의 일환으로 일치 된 그 작동 이유입니다.

'route' => '/user[/[:action[/]]][[id/:id]][/[page/:page]][/[search/:search]]', 

을 그리고 다음 search는 매김 링크에서 유지됩니다 : 같은 토큰에 의해 나는이에 경로를 변경할 수 있습니다. 나는 자바 스크립트를 통해 제출 검색 양식을 수정하는 경우

내가 검색 URL을 구성하고 여기에 사용자를 안내 할 수 있습니다. 그 접근 방식에 대한

간단한 jQuery를 예제 :

$(".search-form").submit(function() { 
    var baseUrl = $(this).attr('action'), 
     search = $(this).find('.search').val(); 

    window.location = baseUrl + '/search/' + search; 

    return false; 
}); 

또 다른 옵션은이 SEARCHTERM 쿼리를 받으면 컨트롤러에 current/route/search/term 경로로 리디렉션하는 것입니다.

답변으로 게시하지만 더 나은 솔루션을 공개했습니다.