2010-02-24 3 views
9

У меня проблема с разбиением на страницы на моей странице поиска. Когда пользователь ищет что-то, у меня есть URL-адрес, например domain.com/search/?s=keyword , но paginator дает мне ссылки, такие как domain.com/search/page:x, , поэтому на следующей и предыдущей странице и на номерах параметр get теряется. Мне нужно настроить paginator для получения таких ссылок, как domain.com/search/page:x/?s=keyword Но я не могу этого сделать.CakePHP pagination и параметры get

мне нужно знать, как настроить

$paginator->options(); 
$paginator->next(); 
$paginator->prev(); 
$paginator->numbers(); 

, чтобы получить необходимую эфект. Thanx.

ответ

0

В принципе вы можете сделать это следующим образом:

function list_results($keywords) 
    { 
    $data = $this->paginate('Posts', array('Post.title LIKE' => '%'.$keywords.'%')); 
    } 
+0

К сожалению Paweł, ты не понимаешь меня. У меня есть данные в моем представлении, но только на первой странице, если я перейду на страницу 2, я перейду к domain.com/search/page:2, потому что $ paginator в представлении генерирует такие ссылки, поэтому get "s" значение отсутствует в моем контроллере, если я перейду на domain.com/search/page:2/?s=keyword У меня есть 2 страницы результата поиска. Я не знаю, как заставить $ paginator генерировать ссылки, такие как domain.com/search/page:x/?s=keyword – Jos

+0

О, да, я понимаю, что вы сейчас имеете в виду. Ну, я тоже хотел бы увидеть решение этого. Одна вещь, которую вы можете сделать, это использовать компонент сеанса для переноса ключевого слова через страницы. У этого есть некоторые недостатки, хотя (не может дать ссылку кому-то). – PawelMysior

20

создать массив опций

$options = array(
    'url'=> array(
     'controller' => 'posts', 
     'action' => 'search', 
     '?' => 'keyword='.$keyword 
    ) 
); 

набор его помощник

$paginator->options($options) 

, а затем вы можете использовать помощник Paginator сохраняя при этом переменные GET.

надеюсь, что это помогло :)

, чтобы сделать его легче можно putl $ варианты Paginator на ваш взгляд или .ctp файл

$this->Paginator->options['url']['?'] = $this->params['ur]; 

затем поставить значение, которое вы хотите :)

+4

+1 Кроме того, если вы не хотите перезаписывать текущие параметры разбивки на страницы (например, номер страницы и т. Д.), Вы можете добавить в массив параметров: $ this-> Paginator-> options ['url'] ['? '] = $ queryString; ' –

1

Проверить this comment.

Я использовал его, он отлично работает.

в app_controller файла:

function _paginatorURL() { 
    $passed = ""; 
    $retain = $this->params['url']; 
    unset($retain['url']); 
    $this->set('paginatorURL',array($passed, '?' => http_build_query($retain))); 
} 

function beforeFilter() 
{ 
    $this->_paginatorURL(); 
} 

в файле просмотры:

<?php $paginator->options = array('url' => $paginatorURL);?> 

Надеется, что это помогает.

+0

эта ссылка для комментариев не работает –

2

Я использовал решение Матиасом, но за $ ключевого слова я сделал так:

$queryString = explode('?', $_SERVER['REQUEST_URI']); 
$options = array('url'=> array('controller' => 'post', 'action' => 'search', '?' => $queryString[1])); 
2

использовать заявление с вашей точки зрения параметров прохода в то время как пагинация

$paginator->options(array('url' => $this->passedArgs)); 

это самый простой способ для передачи параметров.

Некоторое время $this->passedArgs, не работающее в это время, статическое значение передается там и пытается с этим статическим значением.

$paginator->options(array('url' => array('a', 'b'))); 
0

Я знаю, что это старый, но найдено простое решение, которое работает для меня. Добавьте следующее в файл представления -

$paginator->options(array('url' => array_merge($this->passedArgs, 
array('?' => ltrim(strstr($_SERVER['QUERY_STRING'], '&'), '&'))))); 

Нашел here