spHtml静态生成时要注意的一个问题,参数类型要一致

#1 botnet

地址已经用spHtml生成静态了,可spUrl返回的仍然是动态地址?

前段时间我自写了一个分页函数,遇到一个问题:当网站用spHtml生成静态后,我分页链接显示的还是动态地址;我仔细检查了传给spUrl的参数和spHtml的参数,感觉一样;也就是说这地址明明已生成静态了,为什么spUrl没有返回静态地址?后来问题解决了,原来是参数类型不同,下面举个例子说明一下:

首页看下下面代码:
$urls[] = array(
array('order', 'f_list', array('page'=>3))
);
spClass('spHtml')->makeAll($urls);
echo spUrl('order','f_list',array('page'=>3)) .'
';
输出:
/html/2012/9/04/6745217882.html
这是正常的,

再看下面代码:
$urls[] = array(
array('order', 'f_list', array('page'=>3))
);
spClass('spHtml')->makeAll($urls);

$pid=$this->spArgs('page');
echo spUrl('order','f_list',array('page'=>$pid)) .'
';
我传给页面的参数 page=3 ,输出:
/index.php?c=order&a=f_list&page=3
输出的不是静态地址,可控制器order,动作f_list,参数page=3已生成静态了的,是不是觉得应该输出静态地址才对?

最后把代码改为:
$urls[] = array(
array('order', 'f_list', array('page'=>3))
);
spClass('spHtml')->makeAll($urls);

$pid=$this->spArgs('page');
echo spUrl('order','f_list',array('page'=>(int)$pid)) .'
';
输出:
/html/2012/9/04/6745217882.html
终于如愿输出静态地址了!

关键的地方是
array('page'=>(int)$pid))
把参数page转为数字型,应该是要和生成时array('page'=>3)类型一致吧。

问题解决,不知道朋友们是否遇到过这问题?希望给有需要的朋友一点帮助!

2012-09-04 16:35:34

#2 botnet

不好意思,上面代码的“
不显示”,
如:echo spUrl('order','f_list',array('page'=>(int)$pid)) .'
';

2012-09-04 16:39:08

#3 jake

{:soso_e179:}

不错!

之前其实有不少遇到过此问题,在论坛搜索里面可以找到不少。

2012-09-04 16:59:03