Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在CakePHP中防止分页中的搜索值_Cakephp_Search_Pagination - Fatal编程技术网

如何在CakePHP中防止分页中的搜索值

如何在CakePHP中防止分页中的搜索值,cakephp,search,pagination,Cakephp,Search,Pagination,我有分页代码。它工作得很好。 但我增加了搜索功能。 所以问题是,当我按下提交按钮时,它会显示带有分页的搜索结果。 当我点击页码页面被刷新并且网格有所有默认值时,它会丢失搜索名称 那个么,我怎样才能在整个页面中阻止searchname呢?如果我使用会话,那么何时可以进入会话以及何时删除会话 我获取所有产品的代码如下: $data = $this->paginate('Product'); $this->set("Products",$data); 条件是:

我有分页代码。它工作得很好。 但我增加了搜索功能。 所以问题是,当我按下提交按钮时,它会显示带有分页的搜索结果。 当我点击页码页面被刷新并且网格有所有默认值时,它会丢失搜索名称

那个么,我怎样才能在整个页面中阻止searchname呢?如果我使用会话,那么何时可以进入会话以及何时删除会话

我获取所有产品的代码如下:

     $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));
我能解决我的问题吗?
谢谢

您可以将搜索请求添加到如下参数中

$this->params['named']['search'] = urlencode(json_encode($productname));
当浏览页面时,productname将可用。检查URL,您将看到您的请求。然后,您可以通过查看params数组来检索请求的产品

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


您可以使用搜索名称添加分页

在控制器中

并在视图文件中添加下面给出的代码


请根据您的控制器名称修改上述代码。

您应该将这些文本值传递给base64encoded。它可能会失败,因为它有一些特殊的字符+/等等。官方的cakedc搜索插件甚至在该地区有一个网球场大小的bug。因此比sry更安全。修复方法如下:-无论如何@dolly:如果您想更频繁、更广泛地使用搜索,您可能需要查看这个插件,因为它可以很好地处理这个问题。@dolly-Il可以放在许多不同的地方。在你的行动中就可以了。我将编辑我的答案以向您展示一个示例。
// 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));
<?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)), '+/=', '-_,')),
));
?>