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