CakePHP нумерация страниц и получение параметров - PullRequest
9 голосов
/ 24 февраля 2010

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

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

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

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

Ответы [ 8 ]

20 голосов
/ 24 февраля 2010

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

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

установить его на помощника

$paginator->options($options)

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

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

, чтобы упростить его, вы можете добавить опции plgator в ваш просмотр или файл .ctp

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

затем укажите желаемое значение:)

4 голосов
/ 25 февраля 2010

Чтобы передать все аргументы URL в функции paginator, добавьте следующее в ваше представление: Просмотр простого текста

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

Вот и все. Увидеть http://book.cakephp.org/2.0/en/core-libraries/components/pagination.html

2 голосов
/ 20 марта 2013

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

$paginator->options(array('url' => array('a', 'b'))); 
2 голосов
/ 29 июня 2011

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

$queryString = explode('?', $_SERVER['REQUEST_URI']);
$options = array('url'=> array('controller' => 'post', 'action' => 'search', '?' => $queryString[1]));
1 голос
/ 22 октября 2010

Отметьте этот комментарий .

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

в файле 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 голосов
/ 18 февраля 2019
$this->Paginator->options['url']['?'] = ['key' => $this->params['url']['value']];
0 голосов
/ 11 августа 2015

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

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

Нашел здесь

0 голосов
/ 24 февраля 2010

В основном вы можете сделать это так:

function list_results($keywords)
  {
  $data = $this->paginate('Posts', array('Post.title LIKE' => '%'.$keywords.'%'));
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...