Как я могу предотвратить поиск значения в нумерации страниц в CakePHP - PullRequest
0 голосов
/ 21 марта 2012

У меня есть код для нумерации страниц.и работает нормально.но я добавил функциональность для поиска.так что проблема в том, что когда я нажимаю кнопку отправки, он показывает результаты поиска с подкачкой.и когда я нажимаю на страницу с номером страницы, она обновляется, и сетка имеет все значения по умолчанию, она теряет поисковое имя.

Так как я могу предотвратить поисковое имя по всей странице?Если я использую сессию, то когда я смогу перейти в сессию и когда удалить сессию?

мой код для получения всего продукта выглядит так:

     $data = $this->paginate('Product');
     $this->set("Products",$data);

и по условию имеет вид:

   $productname = $this->data['User']['search'];
   $productname = trim($productname);

   $cond = array('Product.productname LIKE' => "%$productname%"); 
   $this->set('Products', $this->paginate("Product", $cond));

Так я могу решить мою проблему?Спасибо

Ответы [ 2 ]

0 голосов
/ 23 апреля 2012

Вы можете добавить нумерацию страниц с именем поиска

В вашем контроллере

<?php

$separator = array();
$urlSeparator = array();
$search_keyword = '';
$cond = array();

/* if user enter search keyword then  */
if (!empty($this->request->data)) {
 if (isset($this->request->data['User']['Search']) && ($this->request->data['User']['Search'] != '')) {
    $search_keyword = $this->request->data['User']['Search'];
}
}
/*if search keyword is not enter then look for pagination condition params*/
elseif (!empty($this->request->params['named']['cond'])) {

$this->request->params['named']['cond'] = strtr($this->request->params['named']['cond'], '-_, ', '+/=');

$this->request->params['named']['cond'] = json_decode(base64_decode($this->request->params['named']['cond']), true);
    if (isset($this->request->params['named']['cond']['search_keyword']) &&   $this->request->params['named']['cond']['gender'] != '') {
    $search_keyword = trim($this->request->params['named']['cond']['search_keyword']);
 }
}

if(!empty($search_keyword)){
 $cond[] = "Product.productname LIKE '%" . $search_keyword . "'";
 $separator['search_keyword'] = $search_keyword;
}


if (!empty($this->request->params)) {
   if (isset($this->request->params["named"]["page"])) {
    $urlSeparator[] = 'page:' . $this->request->params["named"]["page"];
   }
   if (isset($this->request->params["named"]["sort"])) {
    $urlSeparator[] = 'sort:' . $this->request->params["named"]["sort"];
   }
   if (isset($this->request->params["named"]["direction"])) {
    $urlSeparator[] = 'direction:' . $this->request->params["named"]["direction"];
  }
}

$urlSeparator = implode("/", $urlSeparator);
$this->set('separator', $separator);
$this->set('urlSeparator', $urlSeparator);

$this->set('Products', $this->paginate("Product", $cond));

?>

и в вид файла добавить приведенный ниже код.

<?php
$this->Paginator->options(array('update' => '#div_id_for_update',
    'url' => array('controller' => 'controller_name', 'action' => 'index', "cond" => strtr(base64_encode(json_encode($separator)), '+/=', '-_,')),
));
?>

Пожалуйста, измените приведенный выше код в соответствии с именем вашего контроллера.

0 голосов
/ 21 марта 2012

Вы можете добавить свой поисковый запрос к таким параметрам, как этот

$this->params['named']['search'] = urlencode(json_encode($productname));

Имя продукта будет доступно при навигации по страницам (проверьте URL, вы увидите свой запрос). Затем вы можете получить запрошенный продукт, взглянув на массив params.

if (isset($this->params['named']['search'])) {
  $productname = json_decode(urldecode($this->params['named']['search']));
  // ...
}

РЕДАКТИРОВАТЬ: пример

// inside the index action

if (isset($this->data['User']['search'])) {
    $productname = $this->data['User']['search'];
    $productname = trim($productname);
    $this->params['named']['search'] = urlencode(json_encode($productname));
}

$cond = array();

if (isset($this->params['named']['search'])) {
    $productname = json_decode(urldecode($this->params['named']['search']));
    $cond = array('Product.productname LIKE' => "%$productname%");
}

$this->set('Products', $this->paginate("Product", $cond));
...