2013-07-25 10 views
6

Zımbalanmış bir sonuç kümesi oluşturmak için Zend \ Paginator kullanıyorum. Bu iyi çalışıyor, ancak, bir arama formu ekledikten sonra, iki güzel birlikte oynamak için alamıyorum.ZF2'deki sayfalandırma URL'lerinde sorgu paramlarını nasıl saklarım?

sayfadaki arama formu tarafından üretilen URL: Bu üretilen URL'leri searchterm korur, böylece

user/index/?searchTerm=hello 

nasıl Zend paginator yapılandırmasını değiştirebilir mi? Ben ne eksik

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

:

ben gibi bir şey için umuyordum?

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

Sayfalama şablonu pasajı:

<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', 
      ), 
     ), 
    ), 
), 

sayfalama görünümünde bu kullanılarak inşa edilir: aşağıdaki gibi


modül konfigürasyon yolu tanımlanır

(Ben altındaydım true'un third parameter to url() would retain the query params olarak geçtiği izlenimi.

cevap

2

Şimdi bu üçüncü parametrenin url() yaptıklarını görüyorum. Ben sayfalandırma bağlantıları basitleştirmek ve aşağıdaki gibi 'eylem' tuşuna kaldırabilirsiniz:

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

sayfanın eylem (nedeniyle sadık olmak üçüncü param kadar) URL'nin parçası olarak eşleştirilmiştir çalıştığını olmasını sağlıyor.

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

Sonra search sayfa bağlantıları tutulacaktır: Aynı şekilde bu rota değiştirebilir.

JavaScript ile göndermek için arama formunu değiştirirsem, arama URL'sini oluşturabilir ve kullanıcıyı yönlendirebilirim. Bu yaklaşım için

Basit jQuery örnek:

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

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

    return false; 
}); 

Diğer bir seçenek, bir searchTerm sorgu alırsa denetleyicisi current/route/search/term rotaya yönlendirmek olacaktır.

Bunu bir yanıt olarak gönderiyorum ancak daha iyi çözümlere açığım.

İlgili konular