关于带条件分页(主要用于搜索中),最简单有效的解决...
本帖最后由 qingxin 于 2012-12-12 13:06 编辑今天遇到这个问题,网上搜了一下,未果(觉得网上流传的方法太麻烦了),所以自己动手解决了。由于涉及到很多内容,具体的代码我就不贴出来了,只提供一下思路。
首先,由于前一周研究了一周正则表达式,所以自然而然我第一个想法就是用正则表达式解决这个问题,没想到顺利异常。
以下是参考代码,视实际情况而定,最好和不带条件的方法分开,不要写到一个方法里。
//自动搜索查询条件
$condition = empty($_POST) ? $_GET : $_POST;
$links = $this->links($total,$per,$seg);//这边是得到普通的分页字符串,这里只是示例,开发者依据实际情况而定
//生成查询条件
$condition_str = '?';
foreach ($condition as $key => $value)
{
$condition_str .= '&'.$key.'='.$value;
}
//正则替换并返回
return preg_replace('/href="(.*?)"/','href="$1'.$condition_str.'"', $links);
2012-12-12补充:
在生成查询字符串时还需要一步遍历get或post数组的过程(主要是为了适应post或get数组是多维数组的情况,如果能确保get或post数组始终是一维数组,忽略这段补充),建议写成一个递归函数进行调用
下面这一段
//生成查询条件
$condition_str = '?';
foreach ($condition as $key => $value)
{
$condition_str .= '&'.$key.'='.$value;
}
替换成
//生成查询条件
$condition_str = substr_replace(url_get($condition), '?', 0, 1);
引用的数组遍历函数
function url_get($array,$key = NULL)
{
if(!is_array($array))
{
if(empty($key))
{
return NULL;
}
else
{
return '&'.$key.'='.$array;
}
}
else
{
$ret = NULL;
foreach ($array as $ke => $val)
{
$ret .= url_get($val,$key.'['.$ke.']');
}
$ret = preg_replace('/&\[(.*?)\]/', '&$1', $ret);
return $ret;
}
}
具体实现什么功能没有说清楚啊。。。 等到你在分页上有疑惑的时候再来看吧,多说无益 基于你已经能够正确分页的假设,这个是用来实现有搜索条件时怎么在分页上维持搜索条件的,我不会再回复了,看不懂就算了,只是个小技巧而已 感谢楼主的分享~
PS 分页类本身应该可以实现楼主的需求吧,呵呵 Hex 发表于 2012-11-25 13:40 static/image/common/back.gif
感谢楼主的分享~
PS 分页类本身应该可以实现楼主的需求吧,呵呵
Hex 说得对哦
关于查询条件的处理还是写在model里更好吧
这样就用本身的分页类足够了
因为没太明白LZ的意思,LZ就当我说梦话在吧
若有疑问,期待和LZ进一步探讨哦 qingxin 发表于 2012-11-25 09:07 static/image/common/back.gif
基于你已经能够正确分页的假设,这个是用来实现有搜索条件时怎么在分页上维持搜索条件的,我不会再回复了, ...
在基础掌握牢靠的时候才能这么吊
1、闭门造车并不是好事
2、PHP手册必须熟读
3、ci手册要看,类库最好能够看明白点
4、面对别人的质疑要以平常心对待
5、技巧不是这么随便写个东西就能定义的 我的分页早就实现了多条件搜索、排序等高级功能了。。。。 隐约感觉lz要悲剧,回来一看果然悲剧了 本帖最后由 qingxin 于 2012-12-12 13:05 编辑
在生成查询字符串时还需要一步遍历get或post数组的过程(主要是为了适应post或get数组是多维数组的情况,如果能确保get或post数组始终是一维数组,忽略这段补充回复),建议写成一个递归函数进行调用
下面这一段
//生成查询条件
$condition_str = '?';
foreach ($condition as $key => $value)
{
$condition_str .= '&'.$key.'='.$value;
}
替换成
//生成查询条件
$condition_str = substr_replace(url_get($condition), '?', 0, 1);
引用的数组遍历函数
function url_get($array,$key = NULL)
{
if(!is_array($array))
{
if(empty($key))
{
return NULL;
}
else
{
return '&'.$key.'='.$array;
}
}
else
{
$ret = NULL;
foreach ($array as $ke => $val)
{
$ret .= url_get($val,$key.'['.$ke.']');
}
$ret = preg_replace('/&\[(.*?)\]/', '&$1', $ret);
return $ret;
}
}
页:
[1]
2