一个分页问题
发布于:2022-01-17 09:50:54
#1 yuanjianhua
由于在查询中第一次默认查询是查询出所有的,但是当用户用条件查询时,当有些条件没输全部,
就变成如下,如果全部输入则运行正常,谁能帮我看看这个问题
2010-07-05 17:16:52
#2 yuanjianhua
咋没人回答呢?
2010-07-06 00:01:15
#3 yuanjianhua
JACK,求助啊
2010-07-06 07:43:54
#4 jake
详细说一下?上面的描述看不明白是什么问题,最好顺便贴上些代码
2010-07-06 08:20:46
#5 小双
下面的代码是我写的,估计可以给你提供帮助:
$Atitle = $this->spArgs("Atitle");
$Nickname = $this->spArgs("Nickname");
$Username = $this->spArgs("Username");
$qq = $this->spArgs("qq");
if("" != $Atitle){
$sql1 .=" and zc_article.Atitle like '%".$Atitle."%'";
}
if("" != $Nickname){
$sql2 .=" and zc_article.Nickname like '%".$Nickname."%'";
}
if("" != $Username){
$sql3 .=" and zc_article.Username like '%".$Username."%'";
}
if("" != $qq){
$sql4 .=" and zc_article.qq = '".$qq."'";
}
$sql = "SELECT id,Atitle,vote,isrecommend,ishot,iscolor,istop,ctime FROM zc_article WHERE state=0 and (1=1)";
$sql .=$sql1;
$sql .=$sql2;
$sql .=$sql3;
$sql .=$sql4;
$sql.="order by id desc";
$gb = spClass('lib_article');
$this->results = $gb->spPager($this->spArgs("page",1),10)->findSql($sql);
//查询相关数据总数量
if(FALSE === $gb->findSql($sql)){
$this->sumSearch = 0;
}else{
$this->sumSearch = count($gb->findSql($sql));
}
2010-07-06 11:53:27
#6 yuanjianhua
回复 5 小双 那模板中怎么写呢?
2010-07-07 07:40:31
#7 azwl
由于在查询中第一次默认查询是查询出所有的,但是当用户用条件查询时,当有些条件没输全部,
就变成如下, ...
yuanjianhua 发表于 2010-7-5 17:16 
1. 是不是你拼成德查SQL询语句有问题。
2。分页时的查询条件是一样的。
2010-07-07 10:56:53
#8 yuanjianhua
回复 4 jake 这个是我 根据条件查询出数据 的方法
/**
* @method index
* @author Mark 2010-07-05
* 说明:根据条件查询出数据
*/
function index(){
$enabled = (int)$this->spArgs('enabled'); //获取到是否启用状态
$title = $this->spArgs('title'); //获取投票标题
$fromdate = $this->spArgs('fromdate');//获取开始时间
$todate = $this->spArgs('todate');//获取结束时间
$orders = $this->spArgs('orders');//获取排序方式
$con = " 1 = 1 ";
if(-1 !== $enabled && -2 !== $enabled){
$con.=" && enabled = ".$enabled." ";
}else if(-2 === $enabled){
$con .= " && todate < '".date('Y-m-d',time())."' ";
}
if("" != $title){
$con.= " && subject like '%".$title."%' ";
}
if("" != $fromdate){
$con.=" && fromdate >= '".$fromdate."' ";
}
if("" != $todate){
$con.=" && todate <= '".$todate."' ";
}
if("" != $orders){
$con .= $orders ;
}else{
$con .=" order by subjectid desc";
}
$sql = "select * from `".$GLOBALS['G_SP']['db']['prefix']."vote_subject` where ".$con;
$vote = spClass('lib_vote_subject');
$this->voteList = $vote->spPager($this->spArgs('page', 1), 15)->findSql($sql);
$this->pager = $vote->spPager()->getPager();
$this->params = $this->spArgs();
$this->display('admin/vote.html');
}
这块是模板中显示的{if $pager} 共有投票
{$pager.total_count} 个,共有{$pager.total_page}页(每页{$pager.page_size}个投票):
{if $pager.current_page != $pager.first_page}
前页 |
上一页 |
{/if}
{foreach from=$pager.all_pages item=thepage}
{if $thepage != $pager.current_page}
{$thepage} {else}
{$thepage} {/if}
{/foreach}
{if $pager.current_page != $pager.last_page} |
下一页 |
后页 {/if}
{/if}
而我想的是,当我查询后的翻页并不是所有数据的翻页,而是
对查询出来的数据在进行翻页,这里遇到的问题就是说我查询后的翻页无效,查询不到数据,而
只有把刚刚查询的条件在地址里面传入就行,这个该怎么解决呢?
2010-07-07 15:23:43
#9 jake
只能说在翻页的链接中,你拼装的URL错了,所以就无效了。
2010-07-07 16:29:40
#10 yuanjianhua
回复 9 jake 那您说我的url改怎么拼,当为空,那又该怎么办?
2010-07-07 16:38:54
#11 jake
要改成传入
正确的参数,还有对为空的情况加上默认值
2010-07-07 16:46:34
#12 yuanjianhua
回复 11 jake 对为空的加上默认值?默认值什么才能把所以的数据查询出来的?意思就是说当条件是什么的时候能把所有的数据查询出来!
2010-07-10 14:21:12
#13 wk811201
遇到同样问题
url : admin.php/action/lists/p/2/keyword//cid//istop//isgood//ischecked/
$thsi->spArgs(); 后 得到的值为:
Array
(
[c] => action
[a] => lists
[p] => 2
[keyword] => cid
[istop] => isgood
[ischecked] =>
)
2010-07-10 14:27:17
#14 yuanjianhua
回复 13 wk811201 嗯,不知道怎么解决,郁闷
2010-07-10 15:22:01
#15 wk811201
这样实现了 但是总觉得别扭
$post ['keyword'] = $this->spArgs ( 'keyword', 'null' );
if (isset ( $post ['keyword'] ) && ! empty ( $post ['keyword'] ) && $post ['keyword'] != 'null') {
//sql过滤
$keyword = $cArticle->__val_escape ( $post ['keyword'] );
$conditions .= ' AND title LIKE \'%' . $keyword . '%\' OR message LIKE \'%' . $keyword . '%\'';
}
老大能否处理下路由预处理方法
'url_path_info' => FALSE 就没问题
2010-07-10 16:01:18
#16 jake
楼上的方法有些过于繁琐了,比如说查询keyword的GET传递过来的
if( $keyword = $this->spArgs('keyword',
false) ){ // false是默认值
// 这里可以使用$keyword来进行查找
}else{
echo '您没有输入关键字';
}
另外如果传递的是0或者1,可以这样
$a = $this->spArgs('is', 1); // 1是默认值
if( 1 == $a ){
echo "你输入的是1";
}else{
echo "你输入的是0或者没有输入";
}
2010-07-10 18:26:54
#17 yuanjianhua
回复 16 jake 还是不大懂您说的设置默认值
上面是我的html代码。
对于分页中的参数设置:后面应该还有参数:比如
adsname=首页 等等{if $pager.current_page != $pager.last_page} |
adsname=$params.adsname}">下一页 |
后页 {/if}
对于当adsname为空时,我不知道该怎么设置了,里面又不能写判断!
这个东西
急啊,后台就剩下这个没解决了,其他的都差不多行了,
希望
老大能尽快帮我解决这个问题!这个问题想了很久,困扰很久了,都不知道怎么解决!郁闷
2010-07-13 00:20:39
#18 jake
当adsname为空时,那证明了adsname是“真的”为空,对吗?
你是不是需要这个?
{spUrl c=ads a=index page=$pager.next_page adsname=$params.adsname|default:"adsname值为空"}
smarty变量default默认值功能。
我觉得你还是要把思路理清楚,编程的东西,没有明确的思路是不行的。这里看你说了好几次都没办法把思路说清楚,反正我是看不明白的。什么又要为空,又要有参数,非常的乱。
2010-07-13 09:42:38
#19 liujietoer
你不需要在前台判断adsname这个值是否为空啊,你只需要在控制层来判断是否为空就可以了
为空的时候你就不进行sql的拼接,直接查询所有的,如果不为空你就进行sql的拼接,查询条件的数据
adsname参数 为空查询所有,不为空查询按条件查询 adsname
页面提交------------------->判断是否为空---------------------------------------------->执行查询------------------>返回页面
2010-07-13 10:02:37
#20 liujietoer
不知道我说的是不是你的意思
2010-07-13 10:03:18
#21 yuanjianhua
回复 20 liujietoer 不是这个意思,我现在的问题只是在翻页了
忘了补充一个 'url_path_info' => TRUE 因为我用了美化地址,当我 'url_path_info' => FALSE时,却是正常的!!
2010-07-13 10:06:42
#22 野狐论禅
spModel.php -->的 private function runpager($func_name, $func_args)
在使用URLRewriter后,$this->input_args[0];取到的值将是一个数组,形如:
[0] => Array
(
[raiders-1-1-2-西藏_html] =>
[areaId] => 1
[spotsId] => 1
[pageId] => 2 [keyWords] =>
)
这将导致后面所有的当前页都是第一页!
------而普通URL方式时 [0] 应该只是一个整型数字(当前页码),[1]是每一页的记录条数。
应该是部分代码要做一些调整才能避免此问题吧,Jake不知我的回答是否正确?
2012-08-19 01:43:55
#23 jake
野狐论禅 发表于 2012-8-19 01:43 
spModel.php -->的 private function runpager($func_name, $func_args)
在使用URLRewriter后,$this->inp ...
和spModel没什么关系!本帖的问题,在于楼主不清楚分页中urlrewrite的参数传递和分页的地址构造,所以在参数传递过程中丢失了参数,导致变成了他说的“每次都是第一页”。
分页最重要的,是保留原URL的参数的同时,加入page页码。spModel没有问题的。只需要理解自己的程序和分页原理即可。
举个例子:百度搜索
http://www.baidu.com/baidu?word=%E5%88%86%E9%A1%B5&pn=10&tn=baiduhome_pg&ie=utf-8&usm=1&rsv_page=1&tn=98012088_dg 这里的分页页码是 pn=xx ,就是当前分页数,从页码的URL可以看出,每次点击只有pn参数有变化,其他参数都保持。这个保持就要靠你自己保持了。
其实用论坛里面提供的几个分页源码是挺好用的而且挺简单的,只不过楼主忘记了传参,所以才不成功。
2012-08-19 08:19:39