spPager中静态页面的问题
发布于:2022-01-17 09:50:54
#1 fengyu44
当前页为倒数第二页(即17页)时,模板输出前,$pager的输出为:
Array
(
[total_count] => 176
[page_size] => 10
[total_page] => 18
[first_page] => 1
[prev_page] => 16
[next_page] => 18
[last_page] => 18
[current_page] => 17
[all_pages] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
[10] => 11
[11] => 12
[12] => 13
[13] => 14
[14] => 15
[15] => 16
[16] => 17
[17] => 18
)
)
模板中:
下一页 |
尾页生成的静态页面中:
下一页的链接和1-18页的链接都是静态页面链接,可尾页的链接是动态的。
非常奇怪的是:
改为:
下一页 |
尾页则尾页的链接就是静态的了,可关键是,此时 $pager.next_page 和 $pager.last_page 的值是相同的啊(都是18)
为何会如此呢?困惑很久了。
2010-04-25 23:48:08
#2 jake
同样继续生成尾页就好。
2010-04-26 08:58:58
#3 fengyu44
回复 2 jake 这是什么意思啊?
尾页在缓存链接文件中已经存在,尾页的静态页面也已经生成,但在前面页面(1-17页中)的尾页链接还是动态的。
就算再次生成一次(此时尾页的静态页已经存在),可在其他页面中,该尾页的链接还是动态的
2010-04-26 09:16:14
#4 jake
不明白你的问题是什么?
不过一般来说,做页码的时候,如果当前是最后一页,那么下一页和尾页都不会显示。正如当然是第一页,上一页和第一页也不会显示一样。这里首页要做个判断。
2010-04-26 09:24:53
#5 fengyu44
test.php
class test extends spController
{
function index(){
$o = spClass("test");
$this->tvs = $o->spPager($this->spArgs('p', 1), 10)->findAll();
$this->pager = $o->spPager()->getPager();
$this->display("test.html");
}
function alist(){
$urls = array();
$o = spClass("test");
$total = $o->findCount();
$perpage = 10;
$pagenum = ceil($total/$perpage);
for($i = 1;$i <= $pagenum;$i++){
$urls[] = array(
array('test','index',array('p'=>$i))
);
}
spClass("spHtml")->makeAll($urls);
}
}
test.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 >= -7 && $thepage - $pager.current_page <= 7}>
<{if $thepage != $pager.current_page}>
<{$thepage}>
<{else}>
<{$thepage}>
<{/if}>
<{/if}>
<{/foreach}>
<{if $pager.current_page != $pager.last_page}>
|
下一页 |
尾页
<{/if}>
<{/if}>
访问 index.php?c=test&a=alist
在生成的任一静态页面中(非尾页),可见只有尾页的链接是动态的?
麻烦版主了,不妨试一试,问题就清楚了。
2010-04-26 09:44:06
#6 jake
不是很明白,如果是spHtml函数出了问题,请把问题贴出来,我会在speedphp 3内修改,谢谢。
2010-04-26 12:12:54
#7 fengyu44
怎么说呢,最好就是麻烦版主把我上面的 test.php 放到自己的controller 目录下,并修改$o = spClass("test")为自己已定义的至少有11条数据的数据表,再把test.html 放到 tpl目录下,然后在浏览器输入http://域名/index.php?c=test&a=alist
再访问 http://域名/index.php?c=test&a=index ,可以看到刚生出的页面中,只有尾页的链接是动态的。
如:
共有5389条,6页(每页1000条):
1
2
3
4
5
6
|
下一页 |
尾页
test.rar
2010-04-26 12:40:46
#8 jake
问题找到了,的确是spHtml的问题,正在解决中。。。
2010-04-26 14:38:43
#9 fengyu44
那就好,我就怕是我自己程序的问题。
麻烦版主解决后能再回个帖,谢谢!
2010-04-26 14:42:19
#10 jake
呵呵,问题主要出现在PHP函数serialize本身会区分参数类型,而楼主你的代码中,两次使用p的参数的类型不一样导致的。
你可以这样处理,在test.php文件alist内,加上红色代码:
for($i = 1;$i <= $pagenum;$i++){
$urls[] = array(
array('test','index',array('p'=>
(string)$i))
);
}
然后再删除缓存和静态文件,重新生成即可
2010-04-26 15:13:01
#11 fengyu44
根据版主的解决方式,重新生成后,所有的链接都是动态的了。
2010-04-26 15:44:13
#12 fengyu44
呵呵,问题主要出现在PHP函数serialize本身会区分参数类型,而楼主你的代码中,两次使用p的参数的类型不一 ...
jake 发表于 2010-4-26 15:13 
这好像不是问题的关键吧,同样的定义,为何只有尾页的链接是动态呢?
2010-04-26 15:54:28
#13 jake
加上(string)是不行,序列化类型问题,我还是继续研究研究吧,抱歉了。。。
这是问题的原因,因为生成页面的时候,p是int,但是在页码的位置,last_page是string
2010-04-26 16:04:43
#14 fengyu44
呵呵,我还是不明白。
页码位置:
下一页 |
尾页一个是 $pager.next_page,一个是 $pager.last_page ,其它都一样啊,难道这里 next_page 是int,last_page 是string ?
2010-04-26 16:22:25
#15 jake
呵呵,我还是不明白。
页码位置:
下一页 |
尾页
一个是 $pager.next_page,一个是 $pager.last_page ,其 ...
fengyu44 发表于 2010-4-26 16:22 
呵呵,你猜对了。spPager返回的几个页码,的确是不同类型的。不过这个不是主要问题,主要问题是spHtml内的serialize函数。
2010-04-26 16:24:46
#16 fengyu44
查了 spModel.php 中:
$total_page = ceil( $total_count / $pageSize );
"next_page" => ( ( $page == $total_page ) ? $total_page : ($page + 1)),
"last_page" => $total_page,
两者应该都是int,尝试着强制类型转化:
"last_page" => (int)$total_page, 重新生成,所有页面都是静态的了,问题解决!
2010-04-26 16:26:05
#17 jake
呵呵,已经直接解决了,是用json_encode替代serialize函数,你目前可以打开spView.php文件,把全部的“serialize”替换成“json_encode”就可以。
这个改动也会在speedphp 3中加入,谢谢楼主!
2010-04-26 16:59:03