今天lz找这个bug找了一天,lz用的是thinkcmf,二次开发,先上代码:
public function index(){
// if($_SESSION['search']){
// $search=$_SESSION['search'];
// $where['name'] = array('like', "%".$search."%");
// }else {
// $_SESSION['search']=I('search');
// }
$search=I('search');
$where['name'] = array('like', "%".$search."%");
$where['des'] = array('like', "%".$search."%");
$where['_logic']='or';
$count=$this->introduce_model->where($where)->count();
$page = $this->page($count, 3);
$introduce=$this->introduce_model
->where($where)
->limit($page->firstRow . ',' . $page->listRows)
->select();
$this->assign("introduces",$introduce);
$this->assign("page", $page->show("Admin"));
$this->assign("search",$search);
$this->display();
}
这是我的controller/index
对应的页面:
<form post="post" action="{:U('introduce/index')}">
<input type="text" name="search" value="{$search}" >
<button type="submit">搜索</button>
</form>
好,看来没问题 搜索一下,恩,第一页是搜索后的结果,不错,点击下一页
??!!搜索条件就失效了,尝试过很多办法,
包括添加:
foreach($sear as $key=>$val) {
$Page->parameter .= "$key=".urlencode($val[1]).'&';
}
然并卵。。。
又看了page类的源码,发现以上写法是thinkphp的写法
到了thinkcmf就不一样了。
方法一:
网上有人说吧post改成get
试了一下,?????,直接跳到首页了什么鬼,看了一下URL:
/think/index.php?search=a
没错 g m a参数都不见了,但是这是html的默认处理:把表单中的参数直接接在?后面
所以 生成不了想要的url
这时候想到一个很蠢的办法:
<form post="get" action="{:U('introduce/index')}">
<input type="hidden" name="g" value="Admin" />
<input type="hidden" name="m" value="introduce" />
<input type="hidden" name="a" value="index" />
<input type="text" name="search" value="{$search}" >
<button type="submit">搜索</button>
</form>
人为设定g m a,这时候get一下表单,看看url:/think/index.php?g=Admin&m=Introduce&a=index&search=a
没错了,点击下一页,显示正常,是搜索后的结果。
方法二:
用js,通过给url加参数访问,略
总结:有没有发现只要用get都成功了,看一下url,点击第二页的时候url:
/think/index.php?g=Admin&m=Introduce&a=index&search=a&p=2
这就很明显为什么了:
当我第一次搜索时url变成了/think/index.php?g=Admin&m=Introduce&a=index&search=a,
所以当我点击下一页的时候,在这个url的基础上,参数增加了p=2,
这相当于用url储存了搜索条件
而这是post所办不到的
更多推荐
thinkcmf 搜索分页点击下一页无法保持搜索条件
发布评论