2013-07-25 5 views
6

Zend \ Paginatorを使用してページ区切りの結果セットを作成しています。ただし、検索フォームを追加した後は、この2つを一緒にうまく組み合わせることはできません。ZF2のページネーションURLにクエリパラメータを保持するにはどうすればよいですか?

ページ上の検索フォームで生成URLは次のようになります。それは生産のURLで検索語を保持するように

user/index/?searchTerm=hello 

どのように私はZendののページネータの設定を修正しますか?

私のような何かを期待していた:私は何をしないのです

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()の3番目のパラメータが何をしているのかを見ていきましょう。私は、改ページのリンクを簡素化し、次のように「アクション」キーを削除することができます

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

をページのアクションはそれが動作する理由である(これはその第三pa​​ramは真であることに)URLの一部としてマッチしました。

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

をそしてsearchは、ページネーションリンクに保持されます。同じ理由で、私はこれにルートを変更することができます。

JavaScriptを使用して送信する検索フォームを修正した場合、検索URLを作成してユーザーに誘導することができます。そのアプローチの

単純なjQueryの例は:

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

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

    return false; 
}); 

別のオプションは、検索語問合せを受信した場合、コントローラにcurrent/route/search/term経路にリダイレクトすることであろう。

私はこれを回答として投稿していますが、私はより良い解決策を提供しています。